这更多的是一个关于实现这一点的最佳实践是什么的问题。
我有一个FileSystemWatcher
这应该告诉我用户对文件和文件夹的更改。子目录也会被监视。在同一目录中,我的程序有时也会发生变化。我不想要FileSystemWatcher
检测有关这些程序更改的事件。
我的第一个实现是一个可以添加预期事件的列表。当我收到文件系统事件时,我会检查列表并忽略它(如果存在)。这听起来不是很强大,但似乎很有效。
现在我发现了真正的问题:
D:被观看FileSystemWatcher
.
我有两个这样的文件夹:D:\folder1\folder2
现在我想用我的应用程序删除folder1(其中包含folder2)。所以我将 D:\folder1 放入删除列表中。然后我打电话给类似的东西Directory.Delete(@"D:\folder1", true)
。现在我注意到无法因异常而删除folder1(为什么)。我从列表中删除了删除条目,但folder2 已被删除,并且我得到了他的FileSystemEvent。因此,我收到 D:\folder1\folder2 的文件系统事件。我的程序认为现在用户已经删除了这个文件夹并且正在做错误的事情。
我现在有一些想法:
1.) 通过删除每个文件和每个文件夹来递归删除文件夹。这样我就可以为每个子文件夹获取并归档一个自己的列表条目。我已经实现了它,但是速度非常非常慢。
2.) 也许有更好的方法在FileSystemWatcher
让我的清单过时?
3.) 如果可以删除所有内容,也许可以只删除目录树。因此,如果失败,我仍然拥有所有内容,如果不是,所有内容都会被删除。这对我来说似乎是最优雅的解决方案,但不知道这是否可能?
4.) 我的软件是否可以独占锁定所有文件和文件夹?如果一切顺利,应该可以使用一个删除命令或类似的方式删除所有内容?
我也愿意接受其他额外的解决方案。
编辑1以使其更清楚:
我只想“查看”用户对文件夹的操作。如果我在这里操纵程序中的内容,我不想看到此事件。
通过我的实现,如果文件夹被锁定且无法删除,我会收到子文件夹的事件。
用英语解释并不容易,因为我的母语不是英语;)。
Edit 2:
5.)也许可以过滤FileSystemWatcher
来自已定义流程的所有事件?