如果已删除监视文件夹,则不会引发FileSystemWatcher错误事件 - 但仅当监视文件夹中包含文件时才会引发

时间:2018-05-31 15:46:00

标签: c# filesystemwatcher

我正在使用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}");
    }
}

0 个答案:

没有答案