方法 : FileSystemWatcher コンポーネントのインスタンスを設定する
更新 : 2007 年 11 月
FileSystemWatcher コンポーネントのインスタンスの動作を決定するために、いくつかのプロパティを設定します。これらのプロパティは、コンポーネントのインスタンスがどのディレクトリおよびサブディレクトリを監視するか、およびそれらのディレクトリ内でどのような変更があったときにイベントを発生させるかを決定します。
監視するディレクトリの指定
FileSystemWatcher コンポーネントの監視対象のディレクトリを決定するプロパティは、Path と IncludeSubdirectories の 2 つです。
監視対象のルート ディレクトリの絶対パスを指定するには
次のコードに示すように、既存のコンポーネント インスタンスの Path プロパティを設定します。
Dim MyWatcher As New System.IO.FileSystemWatcher() MyWatcher.Path = "c:\"
System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher(); MyWatcher.Path = "c:\\";
これは標準のディレクトリ パス表記 (c:\directory) または UNC 形式 (\\server\directory) で指定できます。
IncludeSubdirectories プロパティは、ルート ディレクトリ内のサブディレクトリを監視するかどうかを示します。このプロパティを true に設定すると、コンポーネントはメイン ディレクトリ内で監視するのと同じ変更をサブディレクトリ内でも監視します。
監視する変更の指定
監視するディレクトリおよびサブディレクトリの指定に加えて、監視する特定のファイルおよび変更の種類を指定できます。一部、特定の監視するイベントだけにハンドラを定義することで、監視する変更を決定できます。たとえば、ファイルが作成されたときにだけ通知が必要な場合は、Created イベントだけを処理するようにします。ただし、コンポーネントの動作をさらに制限する一連のプロパティを設定できます。
ルート ディレクトリ内の特定のファイルまたはディレクトリだけを監視するには、Filter プロパティを使用して、特定のファイルを指定するか、コンポーネントを制限するワイルドカード マッチング パターンを指定します。たとえば、ルート ディレクトリ内のテキスト ファイルの作成を監視する場合は、Filter プロパティを "*.txt" に設定してから、Created イベントに対するハンドラを作成します。フィルタには、有効なすべてのファイル拡張子を含め、任意の値を設定できます。既定値の "*.*" は、すべてのファイルとディレクトリを返します。また、"" (空の文字列) を指定した場合も、すべてのファイルとディレクトリが返されます。ただし、同時に複数のフィルタ文字列を設定することはできません。複数のフィルタ文字列を設定する必要がある場合は、FileSystemWatcher がイベントの受信を開始した後でフィルタを変更するようにします。
メモ : |
---|
FileSystemWatcher コンポーネントは、ディレクトリ内の変更を監視するようにデザインされています。ディレクトリの属性自体の変更は監視しません。たとえば、c:\MyProjects というディレクトリを監視している場合、コンポーネントはディレクトリ内に加えられる変更を監視しますが、ディレクトリ自体に加えられる変更は監視しません。 |
また、NotifyFilter プロパティを使用して、処理対象の変更をさらに制限することもできます。NotifyFilter プロパティは、ディレクトリ名、ファイル名、またはその両方の変更を監視するように設定できます。さらに、NotifyFilter プロパティには Changed イベントを制限する一連の値が含まれています。Changed イベントは、監視しているファイルに何か変更が加えられるたびにイベントを発生させるため、多数のイベントを発生させる可能性があります。実際に、ファイルのコピーや移動などの標準的な操作のいくつかでは、サイズ、最終書き込み、最終アクセスなどのさまざまな属性が変更されるため、複数のファイル変更イベントが発生します。
NotifyFilter プロパティは、コンポーネントのインスタンスがイベントを発生させるファイルやディレクトリの変更の数を制限します。ファイルやディレクトリの名前が変更されたとき、メイン ディレクトリ内の項目の属性が変更されたとき、ファイルのサイズが変更されたとき、ファイルの最終書き込み時刻や最終アクセス時刻が変更されたとき、またはファイルやディレクトリへのセキュリティ アクセス権が変更されたときにだけイベントを発生させるように、コンポーネントを設定できます。これらの値はすべて、NotifyFilters 列挙値の一部です。下記の例のように BitOr 演算子 (Visual Basic の場合) または | 演算子 (Visual C# の場合) を使用すると、複数の変更を監視するように設定できます。
メモ : |
---|
FileSystemWatcher コンポーネントに変更の監視を開始させるには、EnableRaisingEvents プロパティを true に設定する必要があります。 |
FileSystemWatcher コンポーネントのインスタンスを設定するには
FileSystemWatcher コンポーネントのインスタンスを作成します。詳細については、「方法 : FileSystemWatcher コンポーネントのインスタンスを作成する」を参照してください。
Path プロパティに、監視するルート ディレクトリの絶対パスを設定します。
ヒント : これは標準のファイル パスまたは UNC パスで入力できます。
必要に応じて、インスタンスのプロパティを設定します。
シナリオ
プロパティ
値
ルート内の特定のファイルまたはサブディレクトリ名に対する変更を監視する
インスタンスの監視動作を制限するワイルドカード フィルタ式
ルート ディレクトリに含まれるサブディレクトリ内の変更を監視する
true またはfalse
Changed、Renamed、Deleted、または Created の各イベントを処理するときに、ファイルまたはサブディレクトリに対する特定の変更だけを監視する
NotifyFilters 列挙値に含まれる任意の値
EnableRaisingEvents プロパティを true に設定してコンポーネントのインスタンスを有効にします。
たとえば、"reports" というドロップ ディレクトリ内での .txt ファイルの新規作成を監視する FileSystemWatcher インスタンスを作成するとします。また、データが変更されると動的に再実行される既存のレポートに対しても変更を監視します。次に示すように、コンポーネントを設定します。
' This needs to be declared in a place where it will not go out of scope. ' For example, it would be a class variable in a form class. Dim MyWatcher As New System.IO.FileSystemWatcher() ' This code would go in one of the initialization methods of the class. MyWatcher.Path = "c:\" ' Watch only for changes to *.txt files. MyWatcher.Filter = "*.txt" MyWatcher.IncludeSubdirectories = False ' Filter for Last Write changes. MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite ' Example of watching more than one type of change. MyWatcher.NotifyFilter = _ System.IO.NotifyFilters.LastAccess Or System.IO.NotifyFilters.Size ' Enable the component to begin watching for changes. MyWatcher.EnableRaisingEvents = True
// This needs to be declared in a place where it will not go out of scope. // For example, it would be a class variable in a form class. System.IO.FileSystemWatcher MyWatcher = new System.IO.FileSystemWatcher(); // This code would go in one of the initialization methods of the class. MyWatcher.Path = "c:\\"; // Watch only for changes to *.txt files. MyWatcher.Filter = "*.txt"; MyWatcher.IncludeSubdirectories = false; // Enable the component to begin watching for changes. MyWatcher.EnableRaisingEvents = true; // Filter for Last Write changes. MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite; // Example of watching more than one type of change. MyWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite | System.IO.NotifyFilters.Size;
参照
処理手順
方法 : FileSystemWatcher コンポーネントのインスタンスを作成する