Macromedia Director非公式テクニカルノート ファイルをコピーする
Platform: All CD-ROMなどから、別のディスクにデータをコピーする手法をご紹介します。 1. ビルトインコマンドdownloadNetThingを使う 'downloadNetThing'を使えば、ローカルディスク間でもデータをコピーすることができます。このコマンドの本来の用途は、名前のとおりインターネットからローカルディスクにファイルをダウンロードすることです。 [シンタックス] 'downloadNetThing'は、2つのパラメータを必要とします。元データの場所となる[URL]とコピー先の場所となる[ローカルファイル]です(詳しくは『Lingo辞書』またはオンラインヘルプを参照)。ここにそれぞれ元ファイルとコピー先ファイルの完全パスを指定すれば、ローカルディスク上でコピーができます。 もうひとつ説明を加えておきます。'downloadNetThing'は、コマンドですが、関数のように値を返すということです。どのような値が返るかは、メッセージウィンドウで'put'を実行すれば、簡単に確認ができます。つぎのようなステートメントをメッセージウィンドウで実行すると、このサイトのロゴのGIFファイルがムービーと同じ階層にコピーされます。 [メッセージウィンドウでのテスト例] 関数には必ず括弧()がつきます。括弧をつけなくてもコマンドとしては実行されますが、値が返りません。パラメータは、その括弧の中に記述します。ここでは、1という数字が返りました。パラメータを変えて実行するたびに、返ってくる数字は変わると思います。この数字は「ネットID」と呼ばれます。いってみれば、ネットワーク操作の受付番号です。このネットIDを使って、その操作の現在の状態や、エラーなどを確認することができるのです。 2. 指定したパスにファイルをコピーするスクリプト
-- [指定したパスにファイルをコピーする] ステートメント1行のカスタムハンドラです。'downloadNetThing'コマンドの第1引数にURLでなくコピー元のパスを指定すると、コピー元ファイルを第2引数のパスにコピーすることができます。ハンドラには汎用性をもたせるために、やはり2つの引数を指定することにしました。引数は括弧()でくくってありますが、スペースでも結構です。この段階では、'downloadNetThing'コマンドをxCopyFileハンドラに置換えたに過ぎません。けれど、カスタムハンドラとして作成しておけば、機能を拡張することができます。 ちなみに、スクリプトを記述する際には、カスタムハンドラであることがわかる決まりごとをつくっておくと管理しやすくなります。ここでは、小文字xで始まるハンドラ名をつけることにしましょう。変数名にも頭に小文字がつけてあります。sは文字列(string)を意味します。数値(numeral)にはnをつけることにしましょう。 メッセージウィンドウで試してみます。ムービーと同階層にあるファイル"Test.txt"を同じ階層の"CopyTest.txt"としてコピーするには、以下を実行します。
[メッセージウィンドウでのテスト例] ステートメントで実行している'downloadNetThing'はパラメータを括弧に入れて、関数形式にしました。ただ、このままではネットIDが取得されません。値を変数に格納して、実行結果にエラーがないかどうかを確認することにしましょう。エラーコードは'netError'関数で調べることができます。
[シンタックス] 'netError'関数のパラメータにネットIDを渡すと、そのネットIDの操作のエラーコードが返ります('netError'関数については『Lingo辞書』またはオンラインヘルプ参照)。
-- [パスを指定してファイルをコピーする − 処理を追加 −] 'downloadNetThing'の実行時、処理のネットIDを変数nIDに格納しています。そして、そのnIDを'netError'関数に渡して、処理のエラーコードを取得します。ポイントは最後の'return'です。このキーワードは、'exit'と同じくハンドラを終了します。しかし、ただ終了するだけでなく、'return'の後に記述された値をハンドラの値として返すのです。したがって、このカスタムハンドラは、処理を終えると'downloadNetThing'の操作についてのエラーコードを返すことになります。正しく処理を終えると、"OK"が返ります。その他のエラーコードについては『Lingo辞書』またはオンラインヘルプの'netError'を参照してください(マニュアルには、エラーがないとき0が返るとありますが、正しくは"OK"です)。 メッセージウィンドウで試してみます。カスタムハンドラ'xCopyFile'は、処理を終えると'return'で値を返す関数になりました。ですから、メッセージウィンドウで試す際には、括弧をつけて関数形式にします。
[メッセージウィンドウのテスト結果] 注意すべき点を、3つ補足しておきます。まず、繰り返しになりますが、'downloadNetThing'コマンドを使ってローカル上でファイルをコピーする用法は、ドキュメントに明記されていません。筆者の元には、この使用でとくに問題が生じたという情報はありません。けれど、正規サポートされるかどうかについては、確実ではありません。つぎに、コピー先パスに同名のファイルがすでに存在する場合には、とくにメッセージを表示することもなく上書きコピーされます。さらに、Macintoshの場合、ファイルのクリエータ情報はコピーされません。 3. サードパーティ製エクストラを使う *注記 *注記2 ここでは、サードパーティ製エクストラとして定評のあるBuddy APIを使ったスクリプトをご紹介します。2の'downloadNetThing'を使った例や前掲Macromediaテクニカルノートのサンプルと比べると、引数がひとつ増えて3つになっています。これは、Buddy APIの'baCopyFile'メソッドが、上書き指定のための引数をもっていることに対応したものです。カスタムハンドラxCopyFileの3つ目の引数に'true'を指定すると、コピー先に同名のファイルがあっても上書きします。この引数を省略すれば、すでに存在するファイルは上書きされません。 [メッセージウインドウでのテスト例] ハンドラを実行して返される整数は、Buddy APIの'baCopyFile'メソッドの戻り値です。0は、正しく実行されたことを示します。'baCopyFile'のメソッドやその戻り値について詳しくは、別途リファレンスの「Buddy API: baCopyFile」およびエクストラ添付のドキュメントをご参照ください。
-- [指定したパスにファイルをコピーする] _____ 作成者: 野中文雄 Copyright © 2001-2006 Fumio Nonaka. All rights reserved. |
|||