导致“;在目录C:";中一次错误更改过多;

本文关键字:一次 错误 quot 导致 | 更新日期: 2023-09-27 18:24:00

和其他一些人一样,我在文件系统观察器执行任务时收到了错误"在目录C:''中一次错误更改太多"。现在,如果是c:'',那么很明显有很多变化。但在这种特殊情况下,我设置了以下参数:

Path = C:'
Filter = "test1.txt"
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName
IncludeSubdirectories = true

我启动了观察程序,让它运行了4个小时没有问题,之后我锁定了电脑,过了一会儿回来,突然出现了错误。

现在我想知道是什么原因导致了这种情况下的错误。我是不是忽略了一些重要的事情?或者includesbdirectories参数允许它检查c:''的所有子目录,而忽略c:''中存在的单个文件的筛选器?

导致“;在目录C:";中一次错误更改过多;

您可以增加更改的缓冲区-这对我有一次帮助。

但是,用子目录查找C:''中的每一个更改可能会导致大量工作负载。。

MSDN FileSystemWatcher.InternalBufferSize属性

编辑:

Filter只在Raising方法中进行检查,因此在内部,每个更改都会被类识别。

我查看了框架代码正如你所看到的主要饲养方法。。。。。

    private void NotifyFileSystemEventArgs(int action, string name)
    {
        if (this.MatchPattern(name))
        {
            switch (action)
            {
                case 1:
                    this.OnCreated(new FileSystemEventArgs(WatcherChangeTypes.Created, this.directory, name));
                    return;
                case 2:
                    this.OnDeleted(new FileSystemEventArgs(WatcherChangeTypes.Deleted, this.directory, name));
                    return;
                case 3:
                    this.OnChanged(new FileSystemEventArgs(WatcherChangeTypes.Changed, this.directory, name));
                    return;
            }
        }
    }

正在使用这种方法:"this.MatchPattern(name)"-看起来像这样:

    private bool MatchPattern(string relativePath)
    {
        string fileName = System.IO.Path.GetFileName(relativePath);
        return ((fileName != null) && PatternMatcher.StrictMatchPattern(this.filter.ToUpper(CultureInfo.InvariantCulture), fileName.ToUpper(CultureInfo.InvariantCulture)));
    }

正如你所看到的-过滤器在这里被检查-已经很久没有抑制负载了。。。…所以唯一的方法就是增加缓冲区的大小!

相关文章: