CopyExの使い方について説明します
0.CopyEx.dllアセンブリの概要
1.使い方
2.動作環境
3.対応OS
4.リファレンス
0.CopyEx.dllアセンブリの概要
使い方が非常に簡単です。
名前空間 ChinTools の中の CopyEx をインスタンス生成して、
CopyEx のメソッド StartCopy() を呼び出すだけです。
また、例外をコンポーネントからあがることはほとんどありません、
作成時に指定したパラメータに従って例外をコンポーネント内部ですべて処理します。
通常、予想しないことが起きた場合コンポーネントから例外を起こすべきですが、それでは
本コンポーネントの主旨の一つであるアプリケーションの負担軽減の意味が薄くなりますので、
内部で処理することにしました。ただし、エラーメッセージは指定があれば表示されます。
1.使い方
まず、アプリケーションプログラムからアセンブリを参照できるようにします。
・統合開発環境(IDE)を使う場合、「参照設定」、「参照の追加」などというようなメニュー項目があります、
画面に従って CopyEx.dll を追加してください。これでアプリケーションから使えるようになります。
※本コンポーネントはIDEのデザイナから利用することはできません。
・テキストエディタ+コンパイラという開発スタイルの場合、
CopyEx.dll をコンパイラが見つけられる場所にコピーし、コンパイルオプションを指定してください。
例えば、C# コンパイラなら、/reference(短い形式 /r) に CopyEx.dll を指定すれば良いです。
指定方法は各言語のコンパイラマニュアルをご覧ください。
アプリケーションから使えるようになれば次に、実際にコード例を示します。
C#の例です。ほかの言語でも、各言語の文法に変更すれば、ほとんど同じです。
サンプルです、そのままでは実行できません。ファイル名等はすべて仮定です。
     //コピー元(ファイル、またはフォルダ)、この例ではコピー元は二つ
     string[] CopySRC = new string[2];
     CopySRC[0] = @"c:\test"; //フォルダの例
     CopySRC[1] = @"c:\ABC.txt"; //ファイルの例
     //コピー先のフォルダ、この例ではコピー先は一つ
     string[] CopyDEST = new string[1];
     CopyDEST[0] = @"d:"; //ドライブDにコピーする
     //オプションは配列で設定する
     //配列要素 0 番:エラー発生時メッセージ表示する(1)しない(0)
     //配列要素 1 番:確認画面表示しないで無条件上書きする(1)しない(0)
     //配列要素 2 番:上書きをスキップする(1)しない(0)
     //配列要素 3 番:エラー発生時、処理を続行する(1)しない(0)
     //配列要素 4 番:上書き種類 差分(1) 完全(0)
     char[] Option = new char[]{ '1', '0', '0', '0', '1'};
     ChinTools.CopyEx cpEx = new ChinTools.CopyEx(CopySRC, CopyDEST, false, Option, false, true, "", true, false, "*");
     cpEx.StartCopy();
     //実行後、フォルダc:\test(とそのすべてサブフォルダおよびファイル) と ファイルc:\ABC.txt が
     //d:\ にコピーされます。
2.動作環境
・本コンポーネントは Microsoft .NET Framework1.1以上 にて動作します。
・CLS準拠でコンパイルしておりますので、多くのの.NET対応言語から使用できます。
動作確認済言語 C#, VB.NET, Delphi8
これ以外、動作未確認の言語でもおそらく動作するでしょう。
3.対応OS
・Windows2000、XP、2003で動作確認しております。
・Windows98、ME、NTでも動作可能ですが、環境がないため
動作確認はしておりません。
4.リファレンス
・名前空間
ChinTools
・オブジェクト
CopyEx
・コンストラクタ
     public CopyEx(
       string[] CopySource, //コピー元(ファイル、またはフォルダ)を格納する string 型配列
       string[] CopyDest, //コピー先(フォルダ)を格納する string 型配列
       bool UseIniFile, //必ずfalse
       char[] Option, //コピーオプションを格納する char 型配列
       bool MoveFile, //処理がコピー(false)か移動(true)か
       bool _WriteLog, //ログを出力する(true)しない(false)
       string LogPath, //ログファイル名
       bool WithAttribute,//フォルダ、ファイルの属性もコピーする(true)しない(false)
       bool BackGround, //進捗画面表示する(false)しない(true) 画面を表示しない場合、エラーメッセージも一切でません、ただし上書き確認画面は出ます。
       string searchPattern //コピー対象ファイルのパターン 例 *.txt(テキストファイルのみ) *(すべて)
    )
Option
要素数5個の char 型の配列です。※言語によっては配列開始インデックスが 0 の場合もあります
配列要素 1 番:エラー発生時メッセージ表示する(1)しない(0)
配列要素 2 番:確認画面表示しないで無条件上書きする(1)しない(0)
配列要素 3 番:上書きをスキップする(1)しない(0)
配列要素 4 番:エラー発生時、処理を続行する(1)しない(0)
配列要素 5 番:上書き種類 差分(1) 完全(0)
差分上書きとは:コピー元とコピー先に異なるファイルがあっても無視されます。
つまり同じファイル、フォルダのみが上書きの対象となります。Windowsのデフォルトの動作です。
上書きと指定にしたとしても、処理実行後、コピー元とコピー先の構成が異なる場合があります。
完全上書きとは:コピー元をコピー先に完全に一致させるものです。
処理実行後、コピー元とコピー先は全く同じ構成になります。
LogPath
_WriteLog を false に設定した場合、これは無視されます。
_WriteLog を true に設定した場合、
LogPath に格納されたファイル名へログは出力されます。
既に存在しているファイルなら例外があがります。
LogPathに空文字を渡すとログはコンソールへ出力されます。
・プロパティ
bool Copying [読み]
ファイルをコピー中のなら true を返します。それ以外 false を返します。
int TranferSize [読み書き]
一回のコピー量です。バイト単位です。
大きいサイズのファイルの場合、このサイズに区切ってちょっとずつコピーされます。
デフォルトでは 1024 * 80 (80KB) に設定されています。
これを変更する必要はほとんどありませんが、HDD あるいはストレージの速度にあわせて微調整
すれば、よりよいパフォーマンスを得ることができます。
たとえば、性能のよい HDD ならこのプロパティを大きくしたり、FDD ならかなり小さめに変更するといいでしょう。
重要:ひとつファイルのコピーの最中では、絶対にこれを変更してはいけません。
・イベント
CopyFinished
処理終了時に、このイベントが発生します。
CopyExの処理は非同期に実行されますので、処理終了を探知するにはこのイベントを使うことができます。
コード例:
         ChinTools.CopyEx cp = new ChinTools.CopyEx(.....);
         cp.CopyFinished += new ChinTools.CopyFinishedEventHandler(cp_CopyFinished);
         cp.StartCopy();
         ....
         private void cp_CopyFinished(object sender, ChinTools.CopyFileEventArgs cfe) {
           if(cfe.Reason == ChinTools.CopyFinishedReason.Cancel){
             MessageBox.Show("キャンセルされました。");
           }
           else if(cfe.Reason == ChinTools.CopyFinishedReason.Error){
             MessageBox.Show("処理は、エラーで終了しました。");
           }
           else{ //cfe.Reason == ChinTools.CopyFinishedReason.Normal
             MessageBox.Show("正常終了しました。");
           }
         }
注意:コンストラクタのパラメータでエラー発生時でも処理を続行に設定した場合、エラーで終了になることはありません。
・メソッド
StartCopy()
処理を開始します。
その他
コンポーネントへ、ファイルまたはフォルダの相対パスを渡してはいけません。
ユーザー入力より相対パスが入力された場合、アプリケーション側でそれを絶対パスに変換してから
コンポーネントに渡すようにしてください。
ホームへ