CopyFileProgress

概要: baCopyFileProgressはファイルをコピーします。その間プログレスダイアログボックスを表示します。

シンタックス: Result = baCopyFileProgress( SourceFile , DestFile , Overwrite, Title, ButtonText, Flags )

パラメータ: #string, #string, #string, #string, #string, #integer
SourceFile コピー元のファイル。
DestFile コピー先のファイル名。
Overwrite 上書き処理の方法を指定します。次のいずれかになります。
 "Always"  常にファイルをコピーします
 "IfNewer"  SourceFileDestFileよりも新しい場合にコピーします
 "IfNotExist"  DestFileが前もって存在しない場合のみコピーします
Title ダイアログボックスのタイトル。
ButtonText キャンセルボタンで使用するテキスト。
Flags ダイアログの挙動を変更します。詳細はノートをご覧ください。

戻り値: #integer
ファイルのコピーに成功した場合は0を返します。それ以外は下記のいずれかになります。
 1  コピー元ファイルの名前が無効である
 2  コピー先ファイルの名前が無効である
 3  コピー元ファイルの読み込み中にエラーが発生した
 4  コピー先ファイルの書き込み中にエラーが発生した
 5  コピー先ファイルに必要なディレクトリの作成ができなかった
 6  コピー先ファイルが存在している
 7  コピー先ファイルがコピー元ファイルよりも新しい
 9  ユーザがコピーをキャンセルした


例: OK = baCopyFileProgress( "c:\data\student.dat" , "c:\data\backup\student.dat" , "IfNewer", "ファイルをバックアップしています... ", "Cancel", 0 )

ノート: デフォルトでは、既存の読み込み専用ファイルは上書きしません。しかし"Always"オプションと"IfNewer"オプションに"+"を追加すると(例 "Always+"または"IfNewer+")読み込み専用ファイルであっても上書きされます。

戻り値6(コピー先ファイルが存在している)はパラメータOverwriteに"IfNotExist"を指定した場合のみ返されます。
戻り値7(コピー先ファイルがコピー元ファイルよりも新しい )はパラメータOverwriteに"IfNewer"を指定した場合のみ返されます。その他の戻り値はすべてのOverwriteオプションに対して返されます。
"IfNewer"オプションは次のように機能します:2つのファイルが内部にバージョン番号を持つ場合は、その番号を利用して比較します。そうでない場合は2つのファイルの作成日時で比較します。
DestFileはコピー先のフォルダ名だけではなく、ファイル名まで含めて指定してください。

Flagsには7つの値が定義されています。
CP_NOCANCEL  1  キャンセルボタンを表示しない
CP_NOFILENAME  2  コピー中にファイル名を表示しない
CP_STOPONERROR  4  エラーが発生した場合コピーを中止する
CP_NODIALOG  8  ダイアログボックスを表示しない
CP_CALLBACK  16  コピーコールバックハンドラを使用可能にする
CP_ANIMATE  32  システムのファイルコピーアニメーションを表示する
CP_SIZEUPDATE  64  サイズによってコールバックハンドラをアップデートする

いずれのフラグも併用してダイアログボックスをカスタマイズすることができます。

コールバックハンドラを設定するにはCP_CALLBACKフラグを使用してください。CP_NODIALOGフラグを併用して、オリジナルのダイアログを組み込むのが一般的でしょう。このフラグを使用するには 'baCopyProgressUpdate'というハンドラを追加する必要があります。このハンドラはムービースクリプトでなければなりません。
またこのハンドラには2つのパラメータが渡されます。これまでにコピーされたパーセンテージおよび現在コピーされているファイルです。このハンドラはコピーされたパーセンテージが1増えるか、新しいファイルがコピーされるごとに呼び出されます。CP_SIZEUPDATEを指定した場合、パーセンテージではなくおよそ64Kのデータがコピーされるごとに呼び出されます。

ハンドラ内で1を返すとコピーを中止することができます。0を返すか、何も返さなければコピーが継続されます。下記はハンドラのサンプルです。update〜ファンクションはオリジナルのプログレスダイアログの更新に使用するものです。

on baCopyProgressUpdate percentage, filename
    updateProgressBar percentage
    updateStatus fileName
    if keyPressed( " " ) then --ユーザがスペースバーを押した場合コピーを中止する
        return 1
    end if
end


関連項目: baCopyXFilesProgress
baXCopyProgress
baCopyXFiles
baCopyFile
baXCopy