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