![](/img/trans.png)
[英]configuring filesystemwatcher such that it raises created event only when the file is fully copied
[英]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.