【问题标题】:Detect changes in directory检测目录的变化
【发布时间】:2012-01-20 18:44:44
【问题描述】:

我需要监控文件夹及其子目录是否有任何文件操作(添加/删除/重命名)。我已经阅读了有关 FileSystemWatcher 的信息,但我想监视每次程序运行或用户按下“检查更改”按钮之间的更改(FSW 似乎更倾向于运行时检测)。我的第一个想法是遍历所有(子)目录并对每个文件进行哈希处理。然后,连接所有哈希(已排序)并对其进行哈希处理。当我想检查更改时,我会重复该过程并检查哈希是否相同。

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

附带说明,只要这些脚本不需要最终用户安装任何东西并且脚本可以通知我的 C# 应用程序更改,我不介意使用脚本来执行此操作,如果它们更快的话。

【问题讨论】:

  • 我对你想要做什么以及 FileSystemWatchner 没有做什么而你需要它做什么感到困惑。
  • AFAIK,FSW 不会检测程序关闭和重新打开之间的文件更改。

标签: c# scripting filesystems directory monitor


【解决方案1】:

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

在每次遍历文件时,我们都会检查每个文件的数据库:如果它不存在于数据库中,则它是新的,如果它确实存在,但时间戳不同,则它已更改。

还有一个选项来处理已删除的文件,方法是在通过之前将数据库中的所有文件标记为 ToBeDeleteed,如果找到文件则清除它。然后,在流程结束时,我们可以删除所有标记为 ToBeDeleted 的记录。

【讨论】:

    【解决方案2】:

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

    • 您需要存储文件名以检测“新”和“已删除”文件
    • 文件大小和最后修改时间是衡量文件已更改或未更改的良好且廉价的指标,但不能提供保证
    • 如果文件很大,散列文件的内容可能会非常昂贵,但这是知道它们已以近乎完美的准确度更改的唯一方法(请记住,散列也可能发生冲突,所以如果你想数学上 100% 的确定性也不够好)

    【讨论】:

      猜你喜欢
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2021-06-17
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多