我有一个班级,负责监视正在创建的新文件夹。手动复制和过去文件夹时代码运行良好,但是当通过分布式文件系统复制复制文件夹时,filesystemwatcher没有检测到新文件夹...有什么方法可以解决这个问题吗?
我在Windows Server 2008上运行,Windows服务正在.net 4.5中运行。
我的计划B每秒使用一个任务轮询文件夹。但我宁愿坚持使用filesystemwatcher来重新发明轮子。
profileFolderMonitor = new FileSystemWatcher(path);
profileFolderMonitor.NotifyFilter = NotifyFilters.DirectoryName;
profileFolderMonitor.Error += (sender, args) => Monitor();
profileFolderMonitor.Created += OnFolderCreated;
profileFolderMonitor.EnableRaisingEvents = true;
答案 0 :(得分:1)
多年来,我一直与FileSystemWatcher
有问题。我最终制作了一些将FileSystemWatcher
与轮询选项合并的内容,因此FileSystemWatcher
因某些原因无法提取的事件不会完全丢失:https://github.com/phatboyg/Magnum/tree/d73a9be8f53e03132614e5787c6b3bfcc875ed09/src/Magnum/FileSystem。
我们会遇到网络问题,有时候如果共享位于SAN上,或者只是随机发生,FileSystemWatcher会完全停止。从未弄清楚,因此上面的解决方法。
答案 1 :(得分:1)
我选择了一个简单的类来保持当前注册的文件/ foders的状态,有一个循环验证任何增量(暂停1秒),并在发生增量时更新状态。我通过事件处理程序提交FileSystemEventArgs就像Microsoft FileSystemWatcher一样,它与我的代码库很好地集成。