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

ファイルの変更をイベントで知る方法を探していたら、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();
            }
        }
    }
}

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