如何捕获文件复制/移动事件的详细信息,例如源文件名

net*_*rer 7 .net windows filesystems events filesystemwatcher

只想写一个应用程序来跟踪磁盘中文件之间的关系.

我们知道FileSystemWatcher可以在创建,重命名或删除文件时触发evetns.

但是FileSystemWatcher无法告诉我们源文件的路径.

例如,假设有一个文件F1folder1,然后我们复制F1到另一个名为文件夹folder2,新文件名仍然是F1.在这种情况下,FileSystemWatcher可以告诉我们已经创建了一个新文件folder2.但它不能告诉我们新F1从复制F1folder1,而这些信息是我们需要的.

有什么想法吗?

Ben*_*igt 3

这是因为就文件系统而言,不存在“复制文件”这样的操作。

当您运行文件复制命令时,它实际上会打开旧文件,创建新文件,将内容读取到内存中,写入新文件,然后关闭这两个文件。文件系统看到的所有内容都是写入;没有污点跟踪系统来确定数据实际上来自另一个未经修改的文件。

最后一步是更改目标的元数据以匹配源,这是文件复制与正常将数据写入文件的区别。但同样,文件系统不知道您为什么要更改属性,也不知道您将哪个文件与这两个属性相匹配。

文件系统仅具有链接和取消链接的特殊意识。因此,由“创建内容的第二个链接;删除第一个链接”组成的移动是可以检测到的。如果复制被实现为“创建标记为写时复制的新链接”,那么您可以发现它,但写时复制并不是一个非常流行的文件系统功能。