CopyXFilesProgress

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

シンタックス: Result = baCopyXFilesProgress( SourceDir , DestDir , FileSpec, Overwrite, Title, ButtonText, Flags )

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

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


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

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

コピーされないファイルが一つでもあれば戻り値は0になりません。例えば、
baCopyXFilesProgress( "c:\data" , "d:\backup" , "*.*" , "IfNewer", ....... )
と指定した場合、d:\backup内のファイルにc:\data内のファイルよりも新しいものがあれば戻り値は7(コピー先ファイルがコピー元ファイルより新しい)になります。d:\backup内にc:\data内のファイルよりも新しいものが1つも無い場合のみ戻り値が0になります。

パラメータFileSpecはDOSの標準的なワイルドカードのルールに従います。*はファイル名のあらゆる文字と一致することを意味します。
つまり*.*はすべてのファイルをコピーし、*.bmpは.bmp拡張子を持つすべてのファイルをコピーします。T*.*はTという文字で始まるすべてのファイルをコピーします。

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

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


関連項目: baXCopyProgress
baCopyFileProgress
baCopyXFiles
baCopyFile
baXCopy