ELG*_*ELG 4 .net c# filesystemwatcher
我有一个FileSystemWatcher我想要OnCreated event 复制到监视目录中的每个文件夹.手动将多个文件夹一次性复制到此监视目录中.
目前它只是event为复制的第一个文件夹触发.
因此,如果我正在观看文件夹X并在Windows资源管理器中选择文件夹A,B,C并将它们复制到X中,OnCreated则会针对A而不是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;
Run Code Online (Sandbox Code Playgroud)
这是我的OnCeated方法
void OnCeated(object sender, FileSystemEventArgs e)
{
XDocument xmlDoc = BeginImport(e.FullPath);
}
Run Code Online (Sandbox Code Playgroud)
知道为什么这只是为第一个文件夹复制到监视目录中的事件触发了吗?
jua*_*uan 10
从文档:
Windows操作系统会在FileSystemWatcher创建的缓冲区中通知组件文件更改.如果在短时间内有许多变化,缓冲区可能会溢出.这会导致组件无法跟踪目录中的更改,并且只会提供一揽子通知.使用InternalBufferSize属性增加缓冲区的大小是昂贵的,因为它来自无法换出到磁盘的非分页内存,因此请保持缓冲区尽小但足够大,以免错过任何文件更改事件.要避免缓冲区溢出,请使用NotifyFilter和IncludeSubdirectories属性,以便过滤掉不需要的更改通知.
这似乎是一个内部限制.
我相信一次粘贴所有三个文件夹的行为被认为是"在很短的时间内发生了很多变化" - 你可以使用NotifyFilter并省略一些事件吗?