我意识到 FileSystemWatcher 不提供 Move 事件,而是为同一文件生成单独的 Delete 和 Create 事件。(FilesystemWatcher 正在监视源文件夹和目标文件夹)。
但是,我们如何区分真正的文件移动和随机创建的文件,该文件恰好与最近删除的文件同名?
FileSystemEventArgs 类的某种属性,例如“AssociatedDeleteFile”,如果它是移动的结果,则分配已删除的文件路径,否则为 NULL,会很好。但这当然不存在。
我也理解 FileSystemWatcher 在基本文件系统级别运行,因此“移动”的概念可能只对更高级别的应用程序有意义。但如果是这种情况,人们会推荐什么样的算法来处理我的应用程序中的这种情况?
根据反馈更新:
FileSystemWatcher 类似乎将文件移动视为 2 个不同的事件,一个是原始文件的删除,一个是在新位置的创建。
不幸的是,这些事件之间没有提供“链接”,因此如何区分文件移动和正常的删除或创建并不明显。在操作系统级别,一个移动被特殊处理,你可以几乎瞬间移动一个 1GB 的文件。
一些答案建议在文件上使用散列来在事件之间可靠地识别它们,我可能会采用这种方法。但是,如果有人知道如何更简单地检测移动,请留下答案。