次の方法で共有


System.IO.FileSystemWatcher クラス

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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