FileSystemWatcher Error Событие не возникает, если отслеживаемая папка удалена, но только если в отслеживаемой папке есть файлы внутри - PullRequest
0 голосов
/ 31 мая 2018

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

Если я настроил FSW для просмотра заданной папки EMPTY и включил ее, если я удалил папкуFSW вызывает событие ошибки с сообщением «Отказано в доступе» в исключении.

Если я воссоздаю папку и помещаю один файл в боковой, скажем, текстовый файл, то снова запускаю мое тестовое приложение, если затем удаляюПапка на этот раз событие ошибки не возникает.

Это меня удивляет.Кто-нибудь знает, почему это так?У меня такое ощущение, что я делаю что-то глупое неправильно здесь.

, поэтому краткая информация о проблеме:

  • Удалить пустую просматриваемую папку: событие ошибки FSW возбуждено.
  • Удалить непустую наблюдаемую папку: событие ошибки FSW НЕ возникло.

Вот код для приложения консоли тестирования.

class Program
{
    static WatcherTests tests;
    static void Main(string[] args)
    {
        InitialiseWatcher();
        Console.ReadLine();
    }

    private static void InitialiseWatcher()
    {
        tests = new WatcherTests();
        tests.InitialiseWatcher();
    }
}

class WatcherTests
{
    FileSystemWatcher _watcher;

    internal void InitialiseWatcher()
    {
        _watcher = new FileSystemWatcher();
        _watcher.Changed += OnWatcher_Changed;
        _watcher.Created += OnWatcher_Created;
        _watcher.Deleted += OnWatcher_Deleted;
        _watcher.Error += OnWatcher_Error;
        _watcher.IncludeSubdirectories = false;
        _watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
        _watcher.Path = @"c:\temp\testwatcher";
        _watcher.EnableRaisingEvents = true;
    }

    private void OnWatcher_Error(object sender, ErrorEventArgs e)
    {
        Console.WriteLine($"Watcher_Error {e.GetException().Message}");
    }

    private void OnWatcher_Deleted(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"Watcher_Deleted {e.Name}");
    }

    private void OnWatcher_Created(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"Watcher_Created {e.Name}");
    }

    private void OnWatcher_Changed(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"Watcher_Changed {e.Name}");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...