我正在使用FileSystemWatcher用于其通常目的。然而,当我发现一个特殊的问题时,我正在测试它的错误事件的使用。
如果我将FSW设置为观看给定的 EMPTY 文件夹并将其设置为运行,如果我删除该文件夹,则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}");
}
}