指定したディレクトリの変更をウォッチするには、FileSystemWatcher を使用します。指定したディレクトリのファイルとサブディレクトリの変更をウォッチできます。ローカル コンピュータ、ネットワーク ドライブ、またはリモート コンピュータのファイルをウォッチするコンポーネントを作成できます。
拡張子を持つすべてのファイルの変更をウォッチするには、Filter プロパティに空の文字列 ("") を設定するか、ワイルドカード ("*.*") を使用します。特定のファイルをウォッチするには、Filter プロパティにそのファイル名を設定します。たとえば、ファイル MyDoc.txt の変更をウォッチするには、Filter プロパティに "MyDoc.txt" を設定します。特定の種類のファイルの変更もウォッチできます。たとえば、テキスト ファイルの変更をウォッチするには、Filter プロパティに "*.txt" を設定します。
ディレクトリまたはファイルで、さまざまな種類の変更をウォッチできます。たとえば、ファイルまたはディレクトリの Attributes、LastWrite の日付と時刻、または Size の変更をウォッチできます。NotifyFilter プロパティに NotifyFilters 値の 1 つを設定すると、実行されます。ウォッチできる変更の種類の詳細については、NotifyFilters のトピックを参照してください。
ファイルまたはディレクトリの名前変更、削除、または作成をウォッチできます。たとえば、テキスト ファイルの名前の変更をウォッチするには、Filter プロパティに "*.txt" を設定し、パラメータに Renamed を指定して WaitForChanged メソッドを呼び出します。
Windows オペレーティング システムは、FileSystemWatcher によって作成されたバッファ内のファイルの変更をコンポーネントに通知します。短時間に多くの変更が発生すると、バッファがオーバーフローすることがあります。これにより、コンポーネントはディレクトリの変更は追跡せず、ブランケットの通知だけを行います。InternalBufferSize プロパティを使用してバッファのサイズを大きくすると、そのメモリはディスクにスワップ アウトできない非ページ メモリから割り当てられるため、負荷が大きくなります。そのため、バッファはできるだけ小さくしますが、ファイル変更イベントが見落とされない程度の大きさは維持してください。バッファ オーバーフローを防ぐには、NotifyFilter プロパティと IncludeSubdirectories プロパティを使用して、不要な変更通知をフィルタで排除します。
FileSystemWatcher のインスタンスの初期プロパティ値の一覧については、FileSystemWatcher コンストラクタのトピックを参照してください。
FileSystemWatcher クラスを使用する際には、次の項目に注意してください。
-
隠しファイルは無視されません。
-
一部のシステムでは、FileSystemWatcher はファイルへの変更を 8.3 の短いファイル名形式を使用して報告します。たとえば、"LongFileName.LongExtension" に加えられた変更が "LongFi~.Lon" として報告されます。
-
このクラスは、すべてのメンバに適用されるリンク確認要求および継承確認要求をクラス レベルで格納します。直前の呼び出し元または派生クラスに完全信頼のアクセス許可がない場合、SecurityException がスローされます。セキュリティ要求の詳細については、「リンク確認要求」を参照してください。
フォルダのコピーと移動
オペレーティング システムと FileSystemWatcher オブジェクトは、切り取り/貼り付けアクションまたは移動アクションを、フォルダとその内容の名前変更アクションとして解釈します。ファイルが格納されたフォルダを切り取り、ウォッチ対象のフォルダに貼り付けた場合、FileSystemWatcher オブジェクトは、フォルダだけを新規フォルダとして報告します。フォルダの内容は基本的に名前が変更されるだけであるため報告されません。
フォルダの内容がウォッチ対象フォルダに移動またはコピーされたことを通知するには、次の表に示すように、OnChanged および OnRenamed の各イベント ハンドラ メソッドを提供します。
| イベント ハンドラ | 処理されるイベント | 実行内容 |
| OnChanged | Changed, Created, Deleted | ファイル属性の変更、作成されたファイル、および削除されたファイルを報告します。 |
| OnRenamed | Renamed | 名前が変更されたファイルまたはフォルダの新旧のパスを示します。必要に応じて再帰的に拡張できます。 |
イベントとバッファ サイズ
発生するファイル システム変更イベントの種類は、次に説明する複数の要因によって決まります。
-
一般的なファイル システム操作で、複数のイベントが発生することがあります。たとえば、あるディレクトリから別のディレクトリにファイルを移動するとき、複数の OnChanged、OnCreated、OnDeleted の各イベントが発生することがあります。ファイルの移動は、複数の単純な操作から構成される複雑な操作です。そのため、複数のイベントが発生します。同様に、一部のアプリケーション (ウイルス対策ソフトウェアなど) では追加のファイル システム イベントが発生し、FileSystemWatcher で検出されることがあります。
-
FileSystemWatcher は、切り替えられたり、削除されたりしない限り、ディスクをウォッチできます。CD および DVD の場合、タイム スタンプおよびプロパティが変更されることはないため、FileSystemWatcher がイベントを発生させることはありません。リモート コンピュータでコンポーネントを正しく動作させるには、必要なプラットフォームの 1 つをインストールする必要があります。ただし、Windows NT 4.0 コンピュータからはリモート Windows NT 4.0 コンピュータをウォッチできません。
-
Service Pack 1 適用前の Windows XP、または SP2 以前の Windows 2000 で、複数の FileSystemWatcher オブジェクトが同じ UNC パスをウォッチしている場合は、その中の 1 つのオブジェクトによってのみイベントが発生します。Windows XP SP1 以降、Windows 2000 SP3 以降、または Windows Server 2003 以降のオペレーティング システムを実行しているコンピュータの場合は、すべての FileSystemWatcher オブジェクトによって適切なイベントが発生します。
-
Filter の設定によって、バッファに格納されるデータが減少することはありません。
イベントが見落とされた場合、またはバッファ サイズを超えた場合、Windows オペレーティング システムとの依存関係により、FileSystemWatcher によって Error イベントが発生することはありません。イベントを見落とさないために、次のガイドラインに従ってください。