FileSystemWatcher хранит родительский каталог

Я использую FileSystemWatcher для наблюдения за папкой, и, похоже, это предотвращает удаление родительского папки, но не предотвращает удаление самой папки.

Например, у меня есть файловая структура:

C:\Root\FolderToWatch\...

с FileSystemWatcher таргетингом на FolderToWatch. Когда моя программа работает, если я захожу в проводник Windows и пытаюсь удалить Root, я получаю сообщение об ошибке «Невозможно удалить Root: доступ запрещен».

Однако, если я удалю FolderToWatch ПЕРВЫМ, я могу удалить 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 так цепляется за родительский объект своей цели, а не за саму цель?


person Hank    schedule 02.06.2010    source источник


Ответы (1)


Это связано с тем, что, удаляя корневую папку, вы также неявно удаляете все содержащиеся в ней папки, как в вашем примере «FolderToWatch», которые будут принадлежать процессу FileSystemWatcher.

Наслаждаться!

person Doug    schedule 02.06.2010
comment
Но если причина в этом, то почему можно удалить FolderToWatch напрямую? - person Hank; 03.06.2010