3

フォルダーを監視するために使用FileSystemWatcherしていますが、フォルダーの親が削除されないように見えますが、フォルダー自体の削除は妨げられません。

たとえば、ファイル構造は次のとおりです。

C:\Root\FolderToWatch\...

FileSystemWatcherターゲティングしFolderToWatchます。プログラムの実行中に Windows エクスプローラーで を削除しようとするとRoot、「ルートを削除できません: アクセスが拒否されました」というエラーが表示されます。

ただし、FolderToWatchFIRSTを削除すると、問題Rootなく削除できます。

あなたがそれで遊んでみたいなら、ここにいくつかのコードがあります:

static void Main(string[] args) {

    var watcher = new FileSystemWatcher(@"C:\Root\FolderToWatch");

    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
       | NotifyFilters.FileName | NotifyFilters.DirectoryName;

    watcher.Changed += (sender, e) => Console.WriteLine(e.FullPath);
    watcher.Created += (sender, e) => Console.WriteLine(e.FullPath);
    watcher.Deleted += (sender, e) => Console.WriteLine(e.FullPath);
    watcher.Renamed += (sender, e) => Console.WriteLine(e.FullPath);

    watcher.EnableRaisingEvents = true;

    Console.WriteLine("Press \'q\' to quit.");
    while (Console.Read() != 'q');
}

FileSystemWatcherターゲット自体ではなく、ターゲットの親にハングアップするのはなぜですか?

4

1 に答える 1

1

これは、ルートフォルダを削除すると、そこに含まれるすべてのフォルダも暗黙的に削除されるためです。例では、FileSystemWatcherプロセスが所有する「FolderToWatch」の名前です。

楽しみ!

于 2010-06-02T20:44:16.310 に答える