Hatena::Diary

present このページをアンテナに追加 RSSフィード

2009-07-10

ファイルの作成・削除・変更をイベントで知る方法

ファイルの変更をイベントで知る方法を探していたら、FileSystemWatcher というクラスを発見。

これを使えば、例えば C ドライブ内のファイルの作成・削除・変更を知る事ができそうです。次のように。

using System;
using System.IO;

namespace FileWatcherSample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (FileSystemWatcher watcher = new FileSystemWatcher())
            {
                watcher.Path = @"C:\";
                watcher.IncludeSubdirectories = true;
                watcher.NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName;
                watcher.Filter = "*.*";
                watcher.EnableRaisingEvents = true;

                watcher.Changed += (sender, e) =>
                {
                    Console.WriteLine("{0} が変更されました。", e.FullPath);
                };
                watcher.Created += (sender, e) =>
                {
                    Console.WriteLine("{0} が作成されました。", e.FullPath);
                };
                watcher.Deleted += (sender, e) =>
                {
                    Console.WriteLine("{0} が削除されました。", e.FullPath);
                };
                watcher.Renamed += (sender, e) =>
                {
                    Console.WriteLine("{0} から {1} に変更されました。", e.OldFullPath, e.FullPath);
                };

                Console.WriteLine("Enter で終了します。");
                Console.ReadLine();
            }
        }
    }
}

ただ、「監視から除外するファイル」のフィルタを指定できないのがイマイチ。「特定の拡張子を除外する」といった使い方をしたいのに。

T.HiraseT.Hirase 2009/07/10 14:59 このクラスですが、いまいち使い勝手がよくありません。
ファイルを作成して即削除した場合、イベントが通知されたりされなかったりします。
また、当然ながら作成イベントを処理するハンドラに来た時点でファイルが削除されている可能性があります。
更新イベントも当然ながら、すべての更新を監視できるわけではないようです。

ゲスト


トラックバック - http://d.hatena.ne.jp/griefworker/20090710/file_system_watcher
おとなり日記