C#ライブラリリファレンス - ファイルとディレクトリを監視して変化を捕捉する
ファイルとフォルダーを監視し、作成、更新、削除などの変化をキャッチしたい場合は、FileSystemWatcherクラスを使用します。
日常でたとえると
倉庫番。
使用に適した状況
ファイルとディレクトリ(フォルダー)に関するイベントに基づいて何らかの処理をしたい場合。例えば、ログ機能などが考えられます。
サンプル
/*----------------------------------------------------
*
* ファイルとディレクトリを監視する。
*
----------------------------------------------------*/
using System;
using System.IO;
class Sample
{
static void Main( )
{
//監視を行う準備
string path = Directory.GetCurrentDirectory();
var watcher = new FileSystemWatcher( path );
watcher.IncludeSubdirectories = true;
watcher.NotifyFilter =
NotifyFilters.CreationTime |
NotifyFilters.LastAccess | NotifyFilters.LastWrite |
NotifyFilters.FileName | NotifyFilters.DirectoryName |
NotifyFilters.Size | NotifyFilters.Attributes;
watcher.Created += WatcherEventShow;
watcher.Changed += WatcherEventShow;
watcher.Deleted += WatcherEventShow;
watcher.Renamed += Renamed;
//監視を始める
watcher.EnableRaisingEvents = true;
//監視下でいろいろ行う。
var foo = new FileInfo( "foo.txt" );
StreamWriter writer = foo.CreateText();
writer.WriteLine( "piyo" );
writer.Flush();
writer.Close();
foo.MoveTo( "bar.txt" );
foo.Delete();
var d = new DirectoryInfo( "X" );
d.Create();
d.MoveTo( "e" );
d.Delete();
//終了
Console.ReadLine();
}
//変更の内容を表示する。
static void WatcherEventShow( object sender, FileSystemEventArgs e )
{
Console.Write( e.Name );
switch ( e.ChangeType ) {
case WatcherChangeTypes.Created:
Console.WriteLine( "が生成されました。" );
break;
case WatcherChangeTypes.Changed:
Console.WriteLine( "の内容が変更されました。" );
break;
case WatcherChangeTypes.Deleted:
Console.WriteLine( "が削除されました。" );
break;
}
}
//名前が変更された場合の処理
static void Renamed( object source, RenamedEventArgs e )
{
Console.WriteLine( "{0}の名前が{1}に変更されました。",
e.OldName, e.Name );
}
}
名前空間
System.IO名前空間を参照します。
解説
ビジネス系の管理システムを開発するとき、ファイルとディレクトリ(フォルダー)を監視したい時があります。具体的言うと、ファイルもしくはディレクトリの作成、更新、削除などのイベント(出来事)です。
C#プログラミングで子の要望を実現するには、FileSystemWatcherクラスを使用します。FileSystemWatcherクラスは強力な反面、インスタンスを生成するだけでは何もできません。プロパティの値により、挙動が変わるので、慎重にプロパティの値を設定しましょう。特にEnableRaisingEventsプロパティと、IncludeSubdirectoriesプロパティは重要です。
EnableRaisingEventsプロパティの値を真にしなければイベントを捕捉できませんし、IncludeSubdirectoriesプロパティの値を真にしなければ、サブディレクトリの監視ができません。この2つのプロパティの値に注意しましょう。