2011-12-15 37 views
1

我需要监视任何文件操作(添加/删除/重命名)的文件夹及其子目录。我已经阅读了FileSystemWatcher,但是我想要监视每次运行程序或用户按下“检查更改”按钮(FSW似乎更多地针对运行时检测)之间的更改。我的第一个想法是迭代所有(子)目录并散列每个文件。然后,连接所有散列(已经排序)并将其散列。当我想检查更改时,我重复该过程并检查哈希是否相同。检测目录中的更改

这是一个有效的方法吗? 此外,一旦我检测到更改,我如何才能找出哪些文件已尽快添加,删除或重命名?

作为一个方面说明,我不介意使用脚本,如果他们只要更快的脚本不需要最终用户安装任何软件和脚本可以通知我的C#的变化的应用程序做到这一点。

+0

我很困惑你正在做什么,以及FileSystemWatchner没有做的事情,你需要做什么。 – kenny 2011-12-15 01:18:21

回答

2

我们通过将所有找到的文件及其上次修改时间一起存储在数据库中来处理此问题。

每次通过的文件,我们检查数据库中的每个文件:如果没有在数据库中存在,它是新的,如果它确实存在,但时间戳不同的是,它已经改变了。

还有通过标记的所有文件作为ToBeDeleteed通之前的数据库,并清除该文件是否已经发现处理文件删除的选项。然后,在流程结束时,我们可以删除标记为ToBeDeleted的所有记录。

2

显然,你需要做的目录树的“快照”,并根据需要对它们进行比较。快照的具体内容取决于您的要求。请记住:

  • 您需要存储的文件名,以检测“新”和“删除”的文件
  • 文件大小和最后修改时间是一个很好的和廉价的指标,一个文件有或有没有改变,但不提供担保
  • 哈希文件的内容可以是非常昂贵的,如果文件可能会很大,但它的唯一的方式知道他们已经准确的近乎完美的程度,变更(请记住,散列发生碰撞一样,所以,如果你想这不会是不够好或者数学100%确定)