7

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

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

但是 FileSystemWatcher 不能告诉我们源文件的路径。

例如,假设 中有一个文件F1folder1然后我们复制F1到另一个名为folder2的文件夹,新的文件名仍然是F1. 在这种情况下,FileSystemWatcher可以告诉我们在folder2. 但是它不能告诉我们新的是从inF1中复制过来的,而这个信息正是我们所需要的。F1folder1

有什么想法吗?

4

2 回答 2

3

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

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

最后一步,将文件副本与通常将数据写入文件区分开来,是更改目标的元数据以匹配源。但是同样,文件系统不知道您为什么要更改属性或要匹配它们两个的文件。

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

于 2013-03-21T16:55:21.383 回答
0

问题是:您不会为文件夹“f1”触发复制事件。

触发文件夹 1 的文件监视的是:更新文件、将文件从其他目录复制到“f1”或删除文件。

您可以尝试在“f1”中使用两个文件..同时将文件复制到“f2”您可以更新第二个文件,从而触发更新事件处理程序............

希望这可以帮助....

于 2013-03-21T16:51:51.723 回答