C#:定期检查文件夹中的更改?

时间:2012-08-31 05:10:58

标签: c# sqlite version-control

我有一个包含子文件夹和文件层次结构的文件夹。

我需要定期检查是否有任何文件/文件夹被修改/删除/添加。

我正在考虑从头开发一种算法:

  1. 将整个树状的表示保存在嵌入式数据库(如SQLite)或文件中。
  2. 将每个文件的校验和保存到同一个数据库中。
  3. 在下次调用时,将此数据库与实际文件系统进行比较。
  4. 使用发现已更改的内容更新数据库的信息。
  5. 从第3步开始重复。
  6. 我的程序未运行时可能会发生更改,可以随时关闭/打开 例如,用户可能在星期一关闭程序,在星期二编辑文件,并在星期三重新打开程序。我需要检查在此期间发生了哪些变化,因此我无法使用FileSystemWatcher

    在重新发明轮子之前,是否已经有一些库可以做到这一点?

    注意:

    • 我无法访问gitsvn等任何VCS二进制文件。
    • 语言是C#,但我已准备好移植任何小型Java库。
    • 这是for an open source software,因此它需要是一个开源库。
    • 用于嵌入桌面小部件,因此越轻越好。

3 个答案:

答案 0 :(得分:2)

您可以使用FileSystemWatcher(本机.NET类)来实现您的目的。

答案 1 :(得分:2)

您正在寻找FileSystemWatcher

  

收听文件系统更改通知并在何时引发事件   目录或目录中的文件发生更改。

答案 2 :(得分:2)

如果你不能使用FileSystemWatcher(我讨厌它,它是IMO框架中最脆弱的类)你唯一的另一个选择是手动跟踪文件。您需要存储文件名和文件内容的哈希值,以检查是否添加/删除或更改了文件。我会使用数据库存储它,SQLExpress或SQLite有一个C#包装器。

您的程序会在启动/停止时检查文件,然后我会在运行时使用计时器来定期检查文件。

编辑:来自OP的澄清,我不知道任何开箱即用的库。然而,自己实施它将是微不足道的。带有一个表的小型数据库,以及控制台应用程序或Windows服务中的计时器控件将完全满足您的需求。