gpt4 book ai didi

c# - Filesystemwatcher 导致 "Error too many changes at once in directory C:\"

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:14 26 4
gpt4 key购买 nike

像其他一些人一样,我在 filesystemwatcher 执行其工作时收到错误“在目录 C:\中一次更改太多错误”。现在如果是c:\显然有很多变化。但在这种特殊情况下,我设置了以下参数:

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

我启动了 watcher 并让它正常运行了 4 个小时,之后 Í 锁定了电脑并稍后回来,突然出现错误。

现在我想知道是什么导致了这种情况下的错误。我在这里忽略了一些重要的事情吗?或者是不是 includesubdirectories 参数让它检查 c:\的所有子目录并忽略 C:\中存在的单个文件的过滤器?

最佳答案

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

但是要在 C:\中查找带有子目录的每个更改可能会导致大量工作量..

MSDN FileSystemWatcher.InternalBufferSize Property

编辑:

过滤器仅在 Raising-Method 中进行检查 - 因此在内部每个更改都会被类识别。

我看了一下框架代码正如你所看到的主要饲养方法......

    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)));
}

如您所见 - 此处检查过滤器 - 抑制负载已经很晚了......所以唯一的办法就是增加缓冲区大小!

关于c# - Filesystemwatcher 导致 "Error too many changes at once in directory C:\",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25995241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com