【发布时间】:2009-08-17 04:10:00
【问题描述】:
我意识到 FileSystemWatcher 不提供 Move 事件,而是为同一文件生成单独的 Delete 和 Create 事件。 (FilesystemWatcher 正在监视源文件夹和目标文件夹)。
但是,我们如何区分真正的文件移动和随机创建的文件,该文件恰好与最近删除的文件同名?
FileSystemEventArgs 类的某种属性,例如“AssociatedDeleteFile”,如果它是移动的结果,则分配已删除的文件路径,否则为 NULL,会很棒。不过这当然不存在。
我还了解 FileSystemWatcher 在基本文件系统级别运行,因此“移动”的概念可能仅对更高级别的应用程序有意义。但如果是这种情况,人们会推荐什么样的算法来处理我的应用程序中的这种情况?
根据反馈进行更新:
FileSystemWatcher 类似乎将移动文件视为简单的 2 个不同事件,即删除原始文件,然后在新位置创建。
不幸的是,这些事件之间没有提供“链接”,因此如何区分文件移动和正常的删除或创建并不明显。在操作系统级别,一个移动被特殊处理,你可以几乎瞬间移动一个 1GB 的文件。
一些答案建议使用文件散列来在事件之间可靠地识别它们,我可能会采用这种方法。但是如果有人知道如何更简单地检测移动,请留下答案。
【问题讨论】:
-
在同一个卷中移动的概念是一个低级的概念,从 Windows 上的 NTFS 开始,据我记得..所以它应该在某个地方..
-
@Aviad,是的,我希望它应该是一个低级的东西。如果我将一个 1 GB 文件从 C 盘上的一个文件夹移动到同一驱动器上的另一个文件夹,移动几乎是立即的。我猜 NTFS 只是在更新对同一文件表中文件的指针引用。令人讨厌的是它似乎没有扩展到 FileSystemWatcher,因此我的问题。
-
@Aviad Be Dov:不,至少可以追溯到 DOS 5.0,可能是 4
标签: c# filesystemwatcher