7

提出一个FileSystemWatcher.Error事件后,我不知道下一步该做什么。异常可以是[相对]较小的异常,例如

目录中一次更改太多

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

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

4

2 回答 2

3

肯定取决于错误吗?

  1. 如果由于缓冲区溢出(许多更改)而导致数据过多,请执行列表目录并获取您所追求的更改。
  2. 如果由于您没有足够快地处理 FileSystemWatcher 事件而导致数据过多,请确保您正在有效地处理它。
  3. 已删除的目录,除了处理 FileSystemWatcher 或可能再次监视父目录以重新创建该目录名称之外,无法对其执行任何操作。
于 2012-07-26T10:13:19.987 回答
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));
    }
}
于 2012-07-26T10:12:39.717 回答