从FileSystemWatcher错误中恢复的最佳做法是什么?

时间:2012-07-26 10:07:33

标签: c# .net exception-handling filesystemwatcher

FileSystemWatcher.Error事件发生后,我不知道接下来该做什么。 例外可以是[相对]次要的例外,例如

  

目录

中一次发生太多变化

这不会影响观察者的观看过程,但它也可能是一个大问题 - 例如被监视的目录被删除,在这种情况下观察者不再起作用。

我的问题是处理错误事件的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

肯定取决于错误?

  1. 如果数据太多,因为缓冲区溢出(许多更改),请执行列表目录并抓取您所追求的更改。
  2. 如果数据太多,因为您没有足够快地处理FileSystemWatcher事件,请确保您有效地处理它。
  3. 删除目录,除了处理FileSystemWatcher之外,无法对其进行任何操作,或者可能会再次观看父目录以重新创建该目录名。

答案 1 :(得分:1)

我只是得到内部异常类型,然后根据每个错误决定做什么(重启或失败)。

所以

myWatcher.Error += new ErrorEventHandler(OnError);

跟随

private static void OnError(object source, ErrorEventArgs e)
{
    if (e.GetException().GetType() == typeof(InternalBufferOverflowException))
    {
        //  This can happen if Windows is reporting many file system events quickly 
        //  and internal buffer of the  FileSystemWatcher is not large enough to handle this
        //  rate of events. The InternalBufferOverflowException error informs the application
        //  that some of the file system events are being lost.
        Console.WriteLine(("The file system watcher experienced an internal buffer overflow: " + e.GetException().Message));
    }
}