Я использую 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}");
}
}