![]() |
1
11
根据 docs :
因此,如果你试图非常小心地检测移动,并且拥有相同的路径还不够好,你将不得不使用某种启发式方法。例如,使用文件名、大小、上次修改时间等为源文件夹中的文件创建“指纹”。当您看到任何可能表示移动的事件时,请对照新文件检查“指纹”。 |
![]() |
2
3
据我所知,
我的错误-文档特别指出,在剪切和粘贴操作中,只有移动文件夹中的文件才被视为“重命名”:
它还提到移动文件:
|
![]() |
3
2
我会冒险猜测“移动”确实不存在,所以你只需要查找“删除”,然后将该文件标记为“可能移动”的文件,然后如果你在不久后看到“创建”,我想你可以假定你是正确的。 你是否有一个随机文件创建的案例影响你的移动检测? |
![]() |
4
2
可能要尝试中提到的onChanged和/或onRename事件 the documentation . |
![]() |
5
2
正如您已经提到的,对于C提供的默认filesystemwatcher类,没有可靠的方法可以做到这一点。您可以应用某些启发式方法,如文件名、哈希或 unique file ids 将已创建和已删除的事件映射在一起,但这些方法都不能可靠地工作。此外,您无法轻松获取与已删除事件关联的文件的哈希或文件ID,这意味着您必须在某种类型的数据库中维护这些值。 我认为检测文件移动的唯一可靠方法是创建一个自己的文件系统监视程序。因此,您可以使用不同的方法。如果您只想查看NTFS文件系统上的更改,一种解决方案可能是按照说明读取NTFS更改日志。 here . 它的好处在于,它甚至允许你跟踪在应用程序不运行时发生的更改。 另一种方法是创建一个微过滤器驱动程序,跟踪文件系统操作并将其转发到应用程序。使用这个,你基本上可以得到关于你的文件发生了什么的所有信息,并且你可以得到关于移动文件的信息。这种方法的一个缺点是,您必须创建一个需要安装在目标系统上的单独驱动程序。但好的是,你不需要从头开始,因为我已经开始创建类似这样的东西: https://github.com/CenterDevice/MiniFSWatcher 这允许您简单地跟踪移动的文件,如下所示:
但是,请注意,这需要对内核代码进行签名,以便在64位版本的Windows上运行(如果您没有 disable 签名检查测试)。在编写时,这个代码还处于开发的早期阶段,所以我会 不 在生产系统中使用它。但即使您不打算使用它,它仍然应该提供一些关于如何在Windows上跟踪文件系统事件的信息。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |