繁体   English   中英

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

[英]FileSystemWatcher OnCreated only firing for first file of multiple files copied

我有一个FileSystemWatcher ,我想为复制到监视目录中的每个文件夹触发一个OnCreated event 几个文件夹将一次手动复制到此监视的目录中。

当前,它仅针对复制的第一个文件夹触发event
因此,如果我正在查看文件夹X并在Windows资源管理器中选择文件夹A,B,C并将其复制到X中,则会为A触发OnCreated ,但不会触发B或C。

这是我用来设置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方法

void OnCeated(object sender, FileSystemEventArgs e)
{            
    XDocument xmlDoc = BeginImport(e.FullPath); 
}

知道为什么这仅触发复制到监视目录中的第一个文件夹的事件吗?

文档中

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

这似乎是一个内部限制。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM