FileSystemWatcher クラス
ファイル システムの変更通知を待機し、ディレクトリまたはディレクトリ内のファイルが変更されたときにイベントを発生させます。
この型のすべてのメンバの一覧については、FileSystemWatcher メンバ を参照してください。
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.IO.FileSystemWatcher
Public Class FileSystemWatcher
Inherits Component
Implements ISupportInitialize
[C#]
public class FileSystemWatcher : Component, ISupportInitialize
[C++]
public __gc class FileSystemWatcher : public Component,
ISupportInitialize
[JScript]
public class FileSystemWatcher extends Component implements
ISupportInitialize
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
指定したディレクトリの変更をウォッチするには、 FileSystemWatcher を使用します。指定したディレクトリのファイルとサブディレクトリの変更をウォッチできます。コンポーネントは、ローカル コンピュータ、ネットワーク ドライブ、またはリモート コンピュータのファイルをウォッチできます。
メモ FileSystemWatcher は、切り替えられたり、削除されたりしない限り、ディスクをウォッチできます。CD および DVD の場合、タイム スタンプおよびプロパティが変更されることはないため、 FileSystemWatcher がイベントを発生させることはありません。リモート コンピュータでコンポーネントを正しく動作させるには、これらのいずれかのプラットフォームをインストールする必要があります。ただし、Windows NT 4.0 コンピュータからはリモート Windows NT 4.0 コンピュータをウォッチできません。
すべてのファイルの変更をウォッチするには、 Filter プロパティに空の文字列 ("") を設定します。特定のファイルをウォッチするには、 Filter プロパティにそのファイル名を設定します。たとえば、ファイル MyDoc.txt の変更をウォッチするには、 Filter プロパティに "MyDoc.txt" を設定します。ファイルで特定の種類の変更もウォッチできます。たとえば、テキスト ファイルの変更をウォッチするには、 Filter プロパティに "*.txt" を設定します。
メモ 隠しファイルは無視されません。
ディレクトリまたはファイルで、さまざまな種類の変更をウォッチできます。たとえば、ファイルまたはディレクトリの Attributes 、 LastWrite の日付と時刻、または Size の変更をウォッチできます。 FileSystemWatcher.NotifyFilter プロパティに NotifyFilters 値の 1 つを設定すると、実行されます。ウォッチできる変更の種類の詳細については、 NotifyFilters のトピックを参照してください。
ファイルまたはディレクトリの名前変更、削除、または作成をウォッチできます。たとえば、テキスト ファイルの名前の変更をウォッチするには、 Filter プロパティに "*.txt" を設定し、 WatcherChangeTypes 値に Renamed を指定して、 WaitForChanged メソッドの 1 つを呼び出します。
メモ 一般的なファイル システム操作で、複数のイベントが発生することがあります。たとえば、あるディレクトリから別のディレクトリにファイルを移動するとき、複数の OnChanged 、 OnCreated 、 OnDeleted の各イベントが発生することがあります。ファイルの移動は、複数の単純な操作から構成される複雑な操作です。そのため、複数のイベントが発生します。同様に、一部のアプリケーション (アンチウイルス ソフトウェアなど) では追加のファイル システム イベントが発生し、 FileSystemWatcher で検出されることがあります。
システムは、ファイルの変更をそのコンポーネントに通知し、コンポーネントが作成するバッファ内にその変更を格納して、アプリケーション プログラミング インターフェイスに渡します。短時間に多くの変更が発生すると、バッファがオーバーフローすることがあります。これにより、コンポーネントはディレクトリの変更は追跡せず、ブランケットの通知だけを行います。バッファのサイズを大きくすると、そのメモリはディスクにスワップ アウトできない非ページ メモリから割り当てられるため、負荷は大きくなります。そのため、バッファはできるだけ小さくしてください。バッファのオーバーフローを防ぐには、 NotifyFilter プロパティと IncludeSubdirectories プロパティを使用して、不必要な変更通知をフィルタで排除します。バッファ サイズの詳細については、 InternalBufferSize のトピックを参照してください。
メモ Filter の設定によって、バッファに格納されるデータが減少することはありません。
FileSystemWatcher のインスタンスの初期プロパティ値の一覧については、 FileSystemWatcher コンストラクタのトピックを参照してください。
使用例
[Visual Basic, C#, C++] 実行時に指定したディレクトリをウォッチする FileSystemWatcher を作成する例を次に示します。コンポーネントは、ディレクトリのテキスト ファイルの LastWrite 時刻と LastAccess 時刻の変更、それらのファイルの作成、削除、名前の変更をウォッチするように設定されます。ファイルが変更、作成、または削除されると、そのファイルのパスがコンソールに表示されます。ファイルの名前を変更する場合は、古いパスと新しいパスがコンソールに出力されます。
[Visual Basic, C#, C++] この例では、 System.Diagnostics 名前空間と System.IO 名前空間を使用します。
Public Class Watcher
Public Shared Sub Main()
Dim args() As String = System.Environment.GetCommandLineArgs()
' If a directory is not specified, exit the program.
If args.Length <> 2 Then
' Display the proper way to call the program.
Console.WriteLine("Usage: Watcher.exe (directory)")
Return
End If
' Create a new FileSystemWatcher and set its properties.
Dim watcher As New FileSystemWatcher()
watcher.Path = args(1)
' Watch for changes in LastAccess and LastWrite times, and
' the renaming of files or directories.
watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
' Only watch text files.
watcher.Filter = "*.txt"
' Add event handlers.
AddHandler watcher.Changed, AddressOf OnChanged
AddHandler watcher.Created, AddressOf OnChanged
AddHandler watcher.Deleted, AddressOf OnChanged
AddHandler watcher.Renamed, AddressOf OnRenamed
' Begin watching.
watcher.EnableRaisingEvents = True
' Wait for the user to quit the program.
Console.WriteLine("Press 'q' to quit the sample.")
While Chr(Console.Read()) <> "q"c
End While
End Sub
' Define the event handlers.
Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)
' Specify what is done when a file is changed, created, or deleted.
Console.WriteLine("File: " & e.FullPath & " " & e.ChangeType)
End Sub
Private Shared Sub OnRenamed(source As Object, e As RenamedEventArgs)
' Specify what is done when a file is renamed.
Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath)
End Sub
End Class
[C#]
public class Watcher
{
public static void Main()
{
string[] args = System.Environment.GetCommandLineArgs();
// If a directory is not specified, exit program.
if(args.Length != 2)
{
// Display the proper way to call the program.
Console.WriteLine("Usage: Watcher.exe (directory)");
return;
}
// Create a new FileSystemWatcher and set its properties.
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = args[1];
/* Watch for changes in LastAccess and LastWrite times, and
the renaming of files or directories. */
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Only watch text files.
watcher.Filter = "*.txt";
// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
// Begin watching.
watcher.EnableRaisingEvents = true;
// Wait for the user to quit the program.
Console.WriteLine("Press \'q\' to quit the sample.");
while(Console.Read()!='q');
}
// Define the event handlers.
private static void OnChanged(object source, FileSystemEventArgs e)
{
// Specify what is done when a file is changed, created, or deleted.
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}
private static void OnRenamed(object source, RenamedEventArgs e)
{
// Specify what is done when a file is renamed.
Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}
}
[C++]
public __gc class Watcher
{
public:
// Define the event handlers.
static void OnChanged(Object* /*source*/, FileSystemEventArgs* e)
{
// Specify what is done when a file is changed, created, or deleted.
Console::WriteLine(S"File: {0} {1}", e->FullPath, __box(e->ChangeType));
}
static void OnRenamed(Object* /*source*/, RenamedEventArgs* e)
{
// Specify what is done when a file is renamed.
Console::WriteLine(S"File: {0} renamed to {1}", e->OldFullPath, e->FullPath);
}
};
int main()
{
String* args[] = System::Environment::GetCommandLineArgs();
// If a directory is not specified, exit program.
if(args->Length != 2)
{
// Display the proper way to call the program.
Console::WriteLine(S"Usage: Watcher.exe (directory)");
return 0;
}
// Create a new FileSystemWatcher and set its properties.
FileSystemWatcher* watcher = new FileSystemWatcher();
watcher->Path = args[1];
/* Watch for changes in LastAccess and LastWrite times, and
the renaming of files or directories. */
watcher->NotifyFilter = static_cast<NotifyFilters>( NotifyFilters::LastAccess | NotifyFilters::LastWrite
| NotifyFilters::FileName | NotifyFilters::DirectoryName );
// Only watch text files.
watcher->Filter = S"*.txt";
// Add event handlers.
watcher->Changed += new FileSystemEventHandler(0, Watcher::OnChanged);
watcher->Created += new FileSystemEventHandler(0, Watcher::OnChanged);
watcher->Deleted += new FileSystemEventHandler(0, Watcher::OnChanged);
watcher->Renamed += new RenamedEventHandler(0, Watcher::OnRenamed);
// Begin watching.
watcher->EnableRaisingEvents = true;
// Wait for the user to quit the program.
Console::WriteLine(S"Press \'q\' to quit the sample.");
while(Console::Read()!='q');
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.IO
プラットフォーム: Windows NT Server 4.0, Windows NT Workstation 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: System (System.dll 内)
参照
FileSystemWatcher メンバ | System.IO 名前空間 | FileSystemWatcher.NotifyFilter | NotifyFilters | FileSystemEventArgs | FileSystemEventHandler | Filter | IncludeSubdirectories | InternalBufferOverflowException | RenamedEventArgs | RenamedEventHandler | WaitForChangedResult | WatcherChangeTypes