System.IO.FileSystemWatcher クラス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

指定したディレクトリの変更を監視するために使用 FileSystemWatcher します。 指定したディレクトリのファイルとサブディレクトリの変更を監視できます。 ローカル コンピューター、ネットワーク ドライブ、またはリモート コンピューター上のファイルを監視するコンポーネントを作成できます。

すべてのファイルの変更を監視するには、プロパティをFilter空の文字列 ("") に設定するか、wildカードs ("*.*") を使用します。 特定のファイルを監視するには、プロパティを Filter ファイル名に設定します。 たとえば、ファイル MyDoc.txtの変更を監視するには、プロパティを Filter "MyDoc.txt" に設定します。 特定の種類のファイルの変更を監視することもできます。 たとえば、テキスト ファイルの変更を監視するには、プロパティを Filter "*.txt" に設定します。

ディレクトリまたはファイルで監視できる変更には、いくつかの種類があります。 たとえば、ファイルまたはディレクトリの Attributes変更、 LastWrite 日付と時刻、または変更を Size 監視できます。 これを行うには、プロパティを NotifyFilter いずれかの値に NotifyFilters 設定します。 監視できる変更の種類の詳細については、「〘」を参照してください NotifyFilters

ファイルまたはディレクトリの名前変更、削除、または作成を監視できます。 たとえば、テキスト ファイルの名前変更を監視するには、プロパティを Filter "*.txt" に設定し、パラメーターに WaitForChanged 指定したメソッドを Renamed 呼び出します。

Windows オペレーティング システムは、コンポーネントによって作成されたバッファー内のファイル変更を通知します FileSystemWatcher。 短時間で多くの変更がある場合、バッファーがオーバーフローする可能性があります。 これにより、コンポーネントはディレクトリ内の変更を追跡しなくなります。また、一括通知のみが提供されます。 このプロパティを使用してバッファーのサイズを InternalBufferSize 大きくすると、ディスクにスワップアウトできない非ページ メモリに起因するため、コストが高くなります。そのため、バッファーはファイル変更イベントを見逃さないほど小さいサイズに保ちます。 バッファー オーバーフローを回避するには、不要な変更通知を NotifyFilter 除外できるように、and IncludeSubdirectories プロパティを使用します。

インスタンス FileSystemWatcherの初期プロパティ値の一覧については、コンストラクターを FileSystemWatcher 参照してください。

クラスを使用する場合の FileSystemWatcher 考慮事項:

  • 隠しファイルは無視されません。
  • 一部のシステムでは、 FileSystemWatcher 短い 8.3 ファイル名形式を使用してファイルの変更を報告します。 たとえば、"LongFileName.LongExtension" への変更を "LongFil~" と報告できます。Lon"
  • このクラスには、リンク確認要求と、すべてのメンバーに適用されるクラス レベルの継承確認要求が含まれています。 直接の呼び出し元か派生クラスのいずれかに完全信頼アクセス許可がない場合、SecurityException がスローされます。 セキュリティ要求の詳細については、「リンク確認要求」を参照してください。
  • ネットワーク経由でディレクトリを監視するためにプロパティにInternalBufferSize設定できる最大サイズは 64 KB (キロバイト)です。

フォルダーのコピーと移動

オペレーティング システムと FileSystemWatcher オブジェクトは、切り取り/貼り付けアクションまたは移動アクションを、フォルダーとその内容の名前変更アクションとして解釈します。 ファイルを含むフォルダーを切り取って監視対象のフォルダーに貼り付けると、 FileSystemWatcher オブジェクトはフォルダーのみを新規として報告しますが、その内容は基本的に名前が変更されただけなので報告されません。

フォルダーの内容が移動または監視フォルダーにコピーされたことを通知するには、次の表に示すように、メソッドとOnRenamedイベント ハンドラー メソッドを指定OnChangedします。

イベント ハンドラー 処理されたイベント パフォーマンス
OnChanged ChangedCreatedDeleted ファイル属性、作成されたファイル、および削除されたファイルの変更を報告します。
OnRenamed Renamed 名前が変更されたファイルとフォルダーの古いパスと新しいパスを一覧表示し、必要に応じて再帰的に展開します。

イベントとバッファー サイズ

次に示すように、発生するファイル システム変更イベントに影響を与える要因がいくつかあります。

  • 一般的なファイル システム操作では、複数のイベントが発生する可能性があります。 たとえば、あるディレクトリから別のディレクトリにファイルを移動すると、いくつかのOnChangedディレクトリとOnCreatedOnDeletedイベントが発生する可能性があります。 ファイルの移動は、複数の単純な操作で構成される複雑な操作であるため、複数のイベントが発生します。 同様に、一部のアプリケーション (ウイルス対策ソフトウェアなど) によって FileSystemWatcher検出される追加のファイル システム イベントが発生する場合があります。
  • ディスクが FileSystemWatcher 切り替えまたは削除されていない限り、ディスクを監視できます。 FileSystemWatcherタイムスタンプとプロパティは変更できないため、CD と DVD のイベントは発生しません。 リモート コンピューターには、コンポーネントが正常に機能するために必要なプラットフォームのいずれかがインストールされている必要があります。

バッファー サイズを FileSystemWatcher 超えると、イベントが見逃される可能性があることに注意してください。 イベントが見つからないのを防ぐには、次のガイドラインに従ってください。

  • プロパティを設定してバッファー サイズを InternalBufferSize 大きくします。
  • 長いファイル名を持つファイルを監視することは避けてください。長いファイル名はバッファーがいっぱいになるためです。 短い名前を使用してこれらのファイルの名前を変更することを検討してください。
  • イベント処理コードはできるだけ短くしてください。