FileSystemWatcher OnCreated仅触发复制的多个文件的第一个文件

时间:2012-09-18 18:20:03

标签: c# .net filesystemwatcher

我有FileSystemWatcher我想为复制到监视目录中的每个文件夹} 。将手动将多个文件夹一次性复制到此监视目录中。

目前只会为复制的第一个文件夹触发OnCreated event 因此,如果我正在观看文件夹X并在Windows资源管理器中选择文件夹A,B,C并将它们复制到X,则会为A而不是B或C触发event

这是我用来设置OnCreated

的代码
FileSystemWatcher

这是我的watcher = new System.IO.FileSystemWatcher(watchPath); watcher.InternalBufferSize = 32768; watcher.IncludeSubdirectories = true; watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.CreationTime | NotifyFilters.LastWrite; watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnCreated); watcher.EnableRaisingEvents = true; 方法

OnCeated

任何想法为什么这只会触发复制到监视目录的第一个文件夹的事件?

1 个答案:

答案 0 :(得分:10)

来自the documentation

  

Windows操作系统会在FileSystemWatcher创建的缓冲区中通知组件文件更改。 如果短时间内有很多变化,缓冲区可能会溢出。这会导致组件无法跟踪目录中的更改,并且只会提供一揽子通知。使用InternalBufferSize属性增加缓冲区的大小是昂贵的,因为它来自无法换出到磁盘的非分页内存,因此请保持缓冲区尽小但足够大,以免错过任何文件更改事件。 要避免缓冲区溢出,请使用NotifyFilter和IncludeSubdirectories属性,以便过滤掉不需要的更改通知。

这似乎是一个内部限制。

我认为一次粘贴所有三个文件夹的行为被认为是“短时间内的许多变化” - 您可以使用NotifyFilter并省略一些事件吗?