导致“;在目录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:''中的每一个更改可能会导致大量工作负载。。
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)));
}
正如你所看到的-过滤器在这里被检查-已经很久没有抑制负载了。。。…所以唯一的方法就是增加缓冲区的大小!