興味があったのでちょっと使ってみました。
FileSystemWatcherではEnableRaisingEventsというプロパティにて、イベント処理型と、変更待機のいずれかを選択することができます。
以下の例では、サブフォルダ配下も含め、ファイルの生成・更新・リネーム・削除を監視し何かあったら画面に表示するというサンプルです。イベント処理のタイプで実装しています。
public partial class Dust28Form : Form
{
public Dust28Form()
{
InitializeComponent();
}
private void Dust27Form_Load(object sender, EventArgs e)
{
//デザイナで以下のプロパティが設定してある
////サブディレクトリを含めるかどうか
//fileSystemWatcher.IncludeSubdirectories = true;
////ファイル名のフィルタリング(ぜんぶ)
//fileSystemWatcher.Filter = true;
////監視対象フォルダ
//fileSystemWatcher.Path = "c:\temp";
////監視対象のイベント
//fileSystemWatcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.DirectoryName;
//イベント ハンドラ呼び出しをマーシャリングするために使用するオブジェクト
fileSystemWatcher.SynchronizingObject = this;
//初期状態は機能を無効にする
fileSystemWatcher.EnableRaisingEvents = false;
}
private void btnMonitor_Click(object sender, EventArgs e)
{
//ボタン押下イベント。機能の有効無効を排他的に切り替えている
//今のステータスと入れ替える
fileSystemWatcher.EnableRaisingEvents = !fileSystemWatcher.EnableRaisingEvents;
//ボタンのキャプションを変更する
btnMonitor.Text = fileSystemWatcher.EnableRaisingEvents ? "監視停止" : "監視開始";
}
private void fileSystemWatcher_Changed(object sender, System.IO.FileSystemEventArgs e)
{
//更新
AddLog("Changed", e);
}
private void fileSystemWatcher_Created(object sender, System.IO.FileSystemEventArgs e)
{
//生成
AddLog("Created", e);
}
private void fileSystemWatcher_Deleted(object sender, System.IO.FileSystemEventArgs e)
{
//削除
AddLog("Deleted", e);
}
private void fileSystemWatcher_Renamed(object sender, System.IO.RenamedEventArgs e)
{
//名前変更
AddLog("Renamed", e);
}
private void AddLog(String evt, System.IO.RenamedEventArgs e)
{
//画面への出力(ファイル名変更)
textLog.AppendText(String.Format("{0} Event={1} File={2} OldFile={3}\n", evt, e.ChangeType, e.FullPath,e.OldFullPath));
}
private void AddLog(String evt, System.IO.FileSystemEventArgs e)
{
//画面への出力(更新・削除・作成)
textLog.AppendText(String.Format("{0} Event={1} File={2}\n", evt, e.ChangeType, e.FullPath));
}
}
{
public Dust28Form()
{
InitializeComponent();
}
private void Dust27Form_Load(object sender, EventArgs e)
{
//デザイナで以下のプロパティが設定してある
////サブディレクトリを含めるかどうか
//fileSystemWatcher.IncludeSubdirectories = true;
////ファイル名のフィルタリング(ぜんぶ)
//fileSystemWatcher.Filter = true;
////監視対象フォルダ
//fileSystemWatcher.Path = "c:\temp";
////監視対象のイベント
//fileSystemWatcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.DirectoryName;
//イベント ハンドラ呼び出しをマーシャリングするために使用するオブジェクト
fileSystemWatcher.SynchronizingObject = this;
//初期状態は機能を無効にする
fileSystemWatcher.EnableRaisingEvents = false;
}
private void btnMonitor_Click(object sender, EventArgs e)
{
//ボタン押下イベント。機能の有効無効を排他的に切り替えている
//今のステータスと入れ替える
fileSystemWatcher.EnableRaisingEvents = !fileSystemWatcher.EnableRaisingEvents;
//ボタンのキャプションを変更する
btnMonitor.Text = fileSystemWatcher.EnableRaisingEvents ? "監視停止" : "監視開始";
}
private void fileSystemWatcher_Changed(object sender, System.IO.FileSystemEventArgs e)
{
//更新
AddLog("Changed", e);
}
private void fileSystemWatcher_Created(object sender, System.IO.FileSystemEventArgs e)
{
//生成
AddLog("Created", e);
}
private void fileSystemWatcher_Deleted(object sender, System.IO.FileSystemEventArgs e)
{
//削除
AddLog("Deleted", e);
}
private void fileSystemWatcher_Renamed(object sender, System.IO.RenamedEventArgs e)
{
//名前変更
AddLog("Renamed", e);
}
private void AddLog(String evt, System.IO.RenamedEventArgs e)
{
//画面への出力(ファイル名変更)
textLog.AppendText(String.Format("{0} Event={1} File={2} OldFile={3}\n", evt, e.ChangeType, e.FullPath,e.OldFullPath));
}
private void AddLog(String evt, System.IO.FileSystemEventArgs e)
{
//画面への出力(更新・削除・作成)
textLog.AppendText(String.Format("{0} Event={1} File={2}\n", evt, e.ChangeType, e.FullPath));
}
}
0 件のコメント:
コメントを投稿