.NET TIPS 進行状況を表示しながらディレクトリやファイルをコピー/移動/削除するには?(My機能活用)[2.0のみ、C#、VB]デジタルアドバンテージ 遠藤 孝信2006/02/24 |
|
|
アプリケーションでディレクトリあるいはファイルをコピーや移動する際、ファイルが巨大だったり、ファイルの数が多かったりした場合には、その進行状況をユーザーにダイアログなどで示すべきである。
しかしながら「TIPS:ディレクトリを作成/削除/リネーム/移動するには?」や「TIPS:ファイルをコピー/削除/リネーム/移動するには?」で示されている、System.IO名前空間のクラスを使用したコピーや移動では、そのようなダイアログを表示させることは不可能だ。
VBのMy機能の1つとして提供されているファイル操作機能では、オプションの指定によりコピーや移動中にその進行状況を示す、以下のようなダイアログを表示させることができる。
My機能によるコピー中に表示される進行状況ダイアログ |
ファイル操作のメソッドを呼び出すだけで、このようなダイアログを表示させることができる。これはエクスプローラでのファイル操作時に表示されるダイアログと同じであり、[キャンセル]ボタンによりコピーを中断することもできる。 |
本稿では、My機能として提供されている進行状況ダイアログ付きのディレクトリ/ファイル操作をVB、そしてC#から利用する方法についてまとめる。
My機能として提供されるファイル操作メソッド
以下に示しているメソッドが、My機能として提供されているファイル操作メソッドの一覧である。
これらのメソッドは、VBでは「My.Computer.FileSystem.CopyDirectory(……)」のように記述して呼び出すことができる。C#からは、FileSystemクラス(Microsoft.VisualBasic.FileIO名前空間)の静的メソッドとして呼び出す(具体例は後掲のサンプル・プログラムを参照)。
| |
VBのMy機能で提供されているファイル操作メソッド一覧 | |
これらのメソッドのうち、UIOption列挙体の値を指定するメソッドが進行状況ダイアログを表示する。すべてのメソッドは静的メソッドで、戻り値はない。パラメータ「overwrite」には上書きするかどうかを示すBoolean値を指定する。UIOptionやUICancelOptionなどパラメータは、Microsoft.VisualBasic.FileIO名前空間の列挙体の値を指定することを示している。 |
これらのメソッドのうち、パラメータとしてUIOption列挙体の値を指定するメソッドが、進行状況ダイアログ(プログレス・ダイアログ・ボックスとも呼ばれる)を表示する。
以下にそれらのメソッドのパラメータで指定可能な列挙体の値の一覧を示す。
| ||||||||||||||||||
進行状況ダイアログを表示するメソッドで使用される列挙体 | ||||||||||||||||||
これら3つの列挙体はすべてMicrosoft.VisualBasic.FileIO名前空間に属している。 |
この表にもあるように、進行状況ダイアログの表示中に[キャンセル]ボタンがクリックされた場合には、デフォルトではOperationCanceledException例外(System名前空間)が発生するが、UICancelOptionパラメータでUICancelOption.DoNothingを指定しておけば、操作が中断されるだけで例外は発生しない。
ちなみに、進行状況ダイアログを表示するメソッドは、Windowsのシェル機能を利用してディレクトリやファイルの操作を行う。このため次のような上書き確認のダイアログが表示されたりもする。
[フォルダの上書きの確認]ダイアログ |
デフォルトでは[いいえ]や[キャンセル]ボタンをクリックすると例外が発生する。 |
My機能のディレクトリ操作を利用したサンプル・プログラム
最後に、My機能を使って進行状況ダイアログを表示しながらディレクトリのコピー/移動/削除を行う簡単なサンプル・プログラムを示しておく。ここではコンソール・アプリケーションとして記述しているが、この場合にも進行状況ダイアログは正しく表示される。
| |
進行状況を表示しながらディレクトリのコピー/移動/削除を行うC#のサンプル・プログラム(progresscopy.cs) | |
このプログラムは最終的にC:\TipsTmpディレクトリを削除してしまうので実行には注意してほしい。なおこのコードをVS 2005でビルドするには、事前にMicrosoft.VisualBasicアセンブリへの参照を追加しておく必要がある。 |
| |
進行状況を表示しながらディレクトリのコピー/移動/削除を行うVBのサンプル・プログラム(progresscopy.vb) | |
このプログラムは最終的にC:\TipsTmpディレクトリを削除してしまうので実行には注意してほしい。 |
C#版のサンプル・プログラムをVisual Studio 2005でビルドする場合には、Microsoft.VisualBasic.dllを参照設定する必要がある。これについては「TIPS:C#からVBのMy機能を利用するには?」を参考にしていただきたい。
なお、いずれのメソッドにおいても、コピー先や移動先のディレクトリが存在しない場合には自動的に作成される。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル 使用ライブラリ:FileSystemクラス(Microsoft.VisualBasic.FileIO名前空間) 使用ライブラリ:UIOption列挙体(Microsoft.VisualBasic.FileIO名前空間) 使用ライブラリ:UICancelOption列挙体(Microsoft.VisualBasic.FileIO名前空間) 使用ライブラリ:RecycleOption列挙体(Microsoft.VisualBasic.FileIO名前空間) 関連TIPS:ディレクトリを作成/削除/リネーム/移動するには? 関連TIPS:ファイルをコピー/削除/リネーム/移動するには? 関連TIPS:C#からVBのMy機能を利用するには? |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|