FileSystemWatcher クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ファイル システムの変更通知を待機し、ディレクトリまたはディレクトリ内のファイルが変更されたときにイベントを発生させます。
public ref class FileSystemWatcher : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public ref class FileSystemWatcher : IDisposable
public ref class FileSystemWatcher : System::ComponentModel::Component, IDisposable, System::ComponentModel::ISupportInitialize
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
public class FileSystemWatcher : IDisposable
[System.IO.IODescription("FileSystemWatcherDesc")]
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
public class FileSystemWatcher : System.ComponentModel.Component, IDisposable, System.ComponentModel.ISupportInitialize
[System.IO.IODescription("")]
public class FileSystemWatcher : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type FileSystemWatcher = class
inherit Component
interface ISupportInitialize
type FileSystemWatcher = class
interface IDisposable
[<System.IO.IODescription("FileSystemWatcherDesc")>]
type FileSystemWatcher = class
inherit Component
interface ISupportInitialize
type FileSystemWatcher = class
inherit Component
interface IDisposable
interface ISupportInitialize
[<System.IO.IODescription("")>]
type FileSystemWatcher = class
inherit Component
interface ISupportInitialize
Public Class FileSystemWatcher
Inherits Component
Implements ISupportInitialize
Public Class FileSystemWatcher
Implements IDisposable
Public Class FileSystemWatcher
Inherits Component
Implements IDisposable, ISupportInitialize
- 継承
- 継承
-
FileSystemWatcher
- 属性
- 実装
例
次の例では、 FileSystemWatcher 実行時に指定されたディレクトリを監視する a を作成します。 コンポーネントは、ディレクトリ内のテキスト ファイルのLastWrite``LastAccess
変更、作成、削除、または名前変更を監視するように設定されています。 ファイルが変更、作成、または削除されると、ファイルへのパスがコンソールに出力されます。 ファイルの名前が変更されると、古いパスと新しいパスがコンソールに出力されます。
#include "pch.h"
using namespace System;
using namespace System::IO;
class MyClassCPP
{
public:
int static Run()
{
FileSystemWatcher^ watcher = gcnew FileSystemWatcher("C:\\path\\to\\folder");
watcher->NotifyFilter = static_cast<NotifyFilters>(NotifyFilters::Attributes
| NotifyFilters::CreationTime
| NotifyFilters::DirectoryName
| NotifyFilters::FileName
| NotifyFilters::LastAccess
| NotifyFilters::LastWrite
| NotifyFilters::Security
| NotifyFilters::Size);
watcher->Changed += gcnew FileSystemEventHandler(MyClassCPP::OnChanged);
watcher->Created += gcnew FileSystemEventHandler(MyClassCPP::OnCreated);
watcher->Deleted += gcnew FileSystemEventHandler(MyClassCPP::OnDeleted);
watcher->Renamed += gcnew RenamedEventHandler(MyClassCPP::OnRenamed);
watcher->Error += gcnew ErrorEventHandler(MyClassCPP::OnError);
watcher->Filter = "*.txt";
watcher->IncludeSubdirectories = true;
watcher->EnableRaisingEvents = true;
Console::WriteLine("Press enter to exit.");
Console::ReadLine();
return 0;
}
private:
static void OnChanged(Object^ sender, FileSystemEventArgs^ e)
{
if (e->ChangeType != WatcherChangeTypes::Changed)
{
return;
}
Console::WriteLine("Changed: {0}", e->FullPath);
}
static void OnCreated(Object^ sender, FileSystemEventArgs^ e)
{
Console::WriteLine("Created: {0}", e->FullPath);
}
static void OnDeleted(Object^ sender, FileSystemEventArgs^ e)
{
Console::WriteLine("Deleted: {0}", e->FullPath);
}
static void OnRenamed(Object^ sender, RenamedEventArgs^ e)
{
Console::WriteLine("Renamed:");
Console::WriteLine(" Old: {0}", e->OldFullPath);
Console::WriteLine(" New: {0}", e->FullPath);
}
static void OnError(Object^ sender, ErrorEventArgs^ e)
{
PrintException(e->GetException());
}
static void PrintException(Exception^ ex)
{
if (ex != nullptr)
{
Console::WriteLine("Message: {0}", ex->Message);
Console::WriteLine("Stacktrace:");
Console::WriteLine(ex->StackTrace);
Console::WriteLine();
PrintException(ex->InnerException);
}
}
};
int main()
{
MyClassCPP::Run();
}
using System;
using System.IO;
namespace MyNamespace
{
class MyClassCS
{
static void Main()
{
using var watcher = new FileSystemWatcher(@"C:\path\to\folder");
watcher.NotifyFilter = NotifyFilters.Attributes
| NotifyFilters.CreationTime
| NotifyFilters.DirectoryName
| NotifyFilters.FileName
| NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.Security
| NotifyFilters.Size;
watcher.Changed += OnChanged;
watcher.Created += OnCreated;
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed;
watcher.Error += OnError;
watcher.Filter = "*.txt";
watcher.IncludeSubdirectories = true;
watcher.EnableRaisingEvents = true;
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
private static void OnChanged(object sender, FileSystemEventArgs e)
{
if (e.ChangeType != WatcherChangeTypes.Changed)
{
return;
}
Console.WriteLine($"Changed: {e.FullPath}");
}
private static void OnCreated(object sender, FileSystemEventArgs e)
{
string value = $"Created: {e.FullPath}";
Console.WriteLine(value);
}
private static void OnDeleted(object sender, FileSystemEventArgs e) =>
Console.WriteLine($"Deleted: {e.FullPath}");
private static void OnRenamed(object sender, RenamedEventArgs e)
{
Console.WriteLine($"Renamed:");
Console.WriteLine($" Old: {e.OldFullPath}");
Console.WriteLine($" New: {e.FullPath}");
}
private static void OnError(object sender, ErrorEventArgs e) =>
PrintException(e.GetException());
private static void PrintException(Exception? ex)
{
if (ex != null)
{
Console.WriteLine($"Message: {ex.Message}");
Console.WriteLine("Stacktrace:");
Console.WriteLine(ex.StackTrace);
Console.WriteLine();
PrintException(ex.InnerException);
}
}
}
}
Imports System.IO
Namespace MyNamespace
Class MyClassVB
Shared Sub Main()
Using watcher = New FileSystemWatcher("C:\path\to\folder")
watcher.NotifyFilter = NotifyFilters.Attributes Or
NotifyFilters.CreationTime Or
NotifyFilters.DirectoryName Or
NotifyFilters.FileName Or
NotifyFilters.LastAccess Or
NotifyFilters.LastWrite Or
NotifyFilters.Security Or
NotifyFilters.Size
AddHandler watcher.Changed, AddressOf OnChanged
AddHandler watcher.Created, AddressOf OnCreated
AddHandler watcher.Deleted, AddressOf OnDeleted
AddHandler watcher.Renamed, AddressOf OnRenamed
AddHandler watcher.Error, AddressOf OnError
watcher.Filter = "*.txt"
watcher.IncludeSubdirectories = True
watcher.EnableRaisingEvents = True
Console.WriteLine("Press enter to exit.")
Console.ReadLine()
End Using
End Sub
Private Shared Sub OnChanged(sender As Object, e As FileSystemEventArgs)
If e.ChangeType <> WatcherChangeTypes.Changed Then
Return
End If
Console.WriteLine($"Changed: {e.FullPath}")
End Sub
Private Shared Sub OnCreated(sender As Object, e As FileSystemEventArgs)
Dim value As String = $"Created: {e.FullPath}"
Console.WriteLine(value)
End Sub
Private Shared Sub OnDeleted(sender As Object, e As FileSystemEventArgs)
Console.WriteLine($"Deleted: {e.FullPath}")
End Sub
Private Shared Sub OnRenamed(sender As Object, e As RenamedEventArgs)
Console.WriteLine($"Renamed:")
Console.WriteLine($" Old: {e.OldFullPath}")
Console.WriteLine($" New: {e.FullPath}")
End Sub
Private Shared Sub OnError(sender As Object, e As ErrorEventArgs)
PrintException(e.GetException())
End Sub
Private Shared Sub PrintException(ex As Exception)
If ex IsNot Nothing Then
Console.WriteLine($"Message: {ex.Message}")
Console.WriteLine("Stacktrace:")
Console.WriteLine(ex.StackTrace)
Console.WriteLine()
PrintException(ex.InnerException)
End If
End Sub
End Class
End Namespace
注釈
指定したディレクトリの変更を監視するために使用 FileSystemWatcher します。 指定したディレクトリのファイルとサブディレクトリの変更を監視できます。 ローカル コンピューター、ネットワーク ドライブ、またはリモート コンピューター上のファイルを監視するコンポーネントを作成できます。
すべてのファイルの変更を監視するには、プロパティを空の Filter 文字列 ("") に設定するか、ワイルドカード ("*.*") を使用します。 特定のファイルを監視するには、プロパティを 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 | Changed, Created, Deleted | ファイル属性、作成されたファイル、および削除されたファイルの変更を報告します。 |
OnRenamed | Renamed | 名前が変更されたファイルとフォルダーの古いパスと新しいパスを一覧表示し、必要に応じて再帰的に展開します。 |
イベントとバッファー サイズ
次に示すように、発生するファイル システム変更イベントには、いくつかの要因が影響を与える可能性があることに注意してください。
一般的なファイル システム操作では、複数のイベントが発生する可能性があります。 たとえば、あるディレクトリから別のディレクトリにファイルを移動すると、いくつかのOnChangedディレクトリとOnCreatedOnDeletedイベントが発生することがあります。 ファイルの移動は、複数の単純な操作で構成される複雑な操作であるため、複数のイベントが発生します。 同様に、一部のアプリケーション (ウイルス対策ソフトウェアなど) によって FileSystemWatcher検出される追加のファイル システム イベントが発生する可能性があります。
ディスクが FileSystemWatcher 切り替えまたは削除されていない限り、ディスクを監視できます。 タイムスタンプとプロパティは FileSystemWatcher 変更できないため、CD と DVD のイベントは発生しません。 リモート コンピューターには、コンポーネントが正常に機能するために必要なプラットフォームのいずれかがインストールされている必要があります。
バッファー サイズを FileSystemWatcher 超えると、イベントが見逃される可能性があることに注意してください。 イベントが見つからないのを回避するには、次のガイドラインに従います。
プロパティを設定してバッファー サイズを InternalBufferSize 大きくします。
長いファイル名を持つファイルを監視することは避けてください。長いファイル名はバッファーがいっぱいになるためです。 短い名前を使用してこれらのファイルの名前を変更することを検討してください。
イベント処理コードはできるだけ短くしてください。
コンストラクター
FileSystemWatcher() |
FileSystemWatcher クラスの新しいインスタンスを初期化します。 |
FileSystemWatcher(String) |
監視するディレクトリを指定して、FileSystemWatcher クラスの新しいインスタンスを初期化します。 |
FileSystemWatcher(String, String) |
FileSystemWatcher クラスの新しいインスタンスを、監視するディレクトリとファイルの種類を指定して初期化します。 |
プロパティ
CanRaiseEvents |
コンポーネントがイベントを発生させることがきるかどうかを示す値を取得します。 (継承元 Component) |
Container |
IContainer を含む Component を取得します。 (継承元 Component) |
DesignMode |
Component が現在デザイン モードかどうかを示す値を取得します。 (継承元 Component) |
EnableRaisingEvents |
コンポーネントが有効かどうかを示す値を取得または設定します。 |
Events |
Component に結び付けられているイベント ハンドラーのリストを取得します。 (継承元 Component) |
Filter |
ディレクトリで監視するファイルを決定するために使用するフィルター文字列を取得または設定します。 |
Filters |
ディレクトリ内で監視するファイルを決定するために、使用されているすべてのフィルターのコレクションを取得します。 |
IncludeSubdirectories |
指定したパスのサブディレクトリを監視するかどうかを示す値を取得または設定します。 |
InternalBufferSize |
内部バッファーのサイズ (バイト単位) を取得または設定します。 |
NotifyFilter |
ウォッチする変更の種類を取得または設定します。 |
Path |
ウォッチするディレクトリのパスを取得または設定します。 |
Site |
ISite の FileSystemWatcher を取得または設定します。 |
SynchronizingObject |
ディレクトリ変更の結果として発行されるイベント ハンドラー呼び出しをマーシャリングするために使用するオブジェクトを取得または設定します。 |
メソッド
BeginInit() |
フォームまたは別のコンポーネントで使用する FileSystemWatcher の初期化を開始します。 初期化は実行時に発生します。 |
CreateObjRef(Type) |
リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。 (継承元 MarshalByRefObject) |
Dispose() |
FileSystemWatcher で使用されるアンマネージ リソースを解放します。 |
Dispose() |
Component によって使用されているすべてのリソースを解放します。 (継承元 Component) |
Dispose(Boolean) |
FileSystemWatcher によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。 |
EndInit() |
フォームまたは別のコンポーネントで使用する FileSystemWatcher の初期化を終了します。 初期化は実行時に発生します。 |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
Finalize() |
現在のインスタンスに保持されているリソースを解放します。 |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetLifetimeService() |
互換性のために残されています。
対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
GetService(Type) |
Component またはその Container で提供されるサービスを表すオブジェクトを返します。 (継承元 Component) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
InitializeLifetimeService() |
互換性のために残されています。
このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
MemberwiseClone(Boolean) |
現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。 (継承元 MarshalByRefObject) |
OnChanged(FileSystemEventArgs) |
Changed イベントを発生させます。 |
OnCreated(FileSystemEventArgs) |
Created イベントを発生させます。 |
OnDeleted(FileSystemEventArgs) |
Deleted イベントを発生させます。 |
OnError(ErrorEventArgs) |
Error イベントを発生させます。 |
OnRenamed(RenamedEventArgs) |
Renamed イベントを発生させます。 |
ToString() |
Component の名前 (存在する場合) を格納する String を返します。 このメソッドはオーバーライドできません。 (継承元 Component) |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
WaitForChanged(WatcherChangeTypes) |
監視する変更の種類を指定して、発生した変更についての固有な情報を格納する構造体を返す同期メソッド。 |
WaitForChanged(WatcherChangeTypes, Int32) |
監視する変更の種類とタイムアウトまでの待機時間 (ミリ秒単位) を指定して、発生した変更についての固有な情報を格納する構造体を返す同期メソッド。 |
WaitForChanged(WatcherChangeTypes, TimeSpan) |
監視する変更の種類を指定して、発生した変更に関する特定の情報を含む構造体を同期的に返します。 |
events
Changed |
指定した Path のファイルまたはディレクトリが変更されたときに発生します。 |
Created |
指定した Path のファイルまたはディレクトリが作成されたときに発生します。 |
Deleted |
指定した Path のファイルまたはディレクトリが削除されたときに発生します。 |
Disposed |
Dispose() メソッドの呼び出しによってコンポーネントが破棄されるときに発生します。 (継承元 Component) |
Error |
FileSystemWatcher のインスタンスが変更の監視を続けられない場合、または内部バッファー オーバーフローの場合に発生します。 |
Renamed |
指定した Path のファイルまたはディレクトリの名前が変更されたときに発生します。 |