FileSystemWatcher, сохраняющий родительский каталог - PullRequest
3 голосов
/ 03 июня 2010

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

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

C:\Root\FolderToWatch\...

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

Однако, если я удаляю FolderToWatch FIRST, я могу удалить 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 так висит на родителе своей цели, но не на самой цели?

1 Ответ

1 голос
/ 03 июня 2010

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

Наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...