使用FileSystemWatcher检测移动文件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (35)

我意识到FileSystemWatcher不提供Move事件,而是为同一个文件生成单独的Delete和Create事件。(FilesystemWatcher正在观察源文件夹和目标文件夹)。

但是,我们如何区分真正的文件移动和一些文件的随机创建,该文件恰好与最近删除的文件同名?

FileSystemEventArgs类的某种属性,例如“AssociatedDeleteFile”,如果它是移动的结果,则分配已删除的文件路径,否则为NULL,这将是很好的。但当然这不存在。

我也理解FileSystemWatcher在基本的文件系统级别运行,因此“移动”的概念可能仅对更高级别的应用程序有意义。但如果是这种情况,人们会建议在我的应用程序中使用哪种算法来处理这种情况?

根据反馈更新:

FileSystemWatcher类似乎看到将文件移动为2个不同的事件,删除原始文件,然后在新位置创建。

不幸的是,这些事件之间没有提供“链接”,因此如何区分文件移动和普通的删除或创建并不明显。在操作系统级别,移动被特别处理,您可以几乎立即移动说1GB文件。

一些答案建议在文件上使用散列来在事件之间可靠地识别它们,我将合理地采用这种方法。但如果有人知道如何更简单地发现一个动作,请留下答案。

提问于
用户回答回答于

根据文件

常见的文件系统操作可能会引发多个事件。例如,当文件从一个目录移动到另一个目录时,可能会引发几个OnChanged和一些OnCreated和OnDeleted事件。移动文件是一项复杂的操作,由多个简单操作组成,因此可以引发多个事件。

因此,如果你试图非常小心地检测移动,并且具有相同的路径是不够好的,那么你将不得不使用某种启发式方法。例如,使用文件名,大小,上次修改时间等为源文件夹中的文件创建“指纹”。当您看到任何可能表示移动的事件时,请检查新文件的“指纹”。

用户回答回答于

我会冒险猜测'移动'确实不存在,所以你真的只需要寻找'删除',然后将该文件标记为可能'可能被移动',然后如果你看到不久之后我就会“创造”,我想你可以认为你是对的。

您是否有一个随机文件创建案例影响您对移动的检测?

所属标签

可能回答问题的人

  • 嗨喽你好

    7 粉丝480 提问9 回答
  • 富有想象力的人

    3 粉丝0 提问7 回答
  • uncle_light

    5 粉丝518 提问6 回答
  • 人生的旅途

    10 粉丝484 提问6 回答

扫码关注云+社区

领取腾讯云代金券