3

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

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

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

  1. 将整个树状结构的表示保存在嵌入式数据库(如 SQLite)或文件中。
  2. 将每个文件的校验和保存到同一个数据库中。
  3. 在下一次调用中,将此数据库与实际文件系统进行比较。
  4. 使用发现已更改的内容更新数据库的信息。
  5. 从第 3 步开始重复。

我的程序未运行时可能会发生更改,它可以随时关闭/打开。
例如,用户可能在星期一关闭程序,在星期二编辑文件,并在星期三重新打开程序。我需要检查在那段时间发生了什么变化,所以我不能使用FileSystemWatcher

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

笔记:

  • 我无权访问任何VCS二进制文件,例如gitsvn.
  • 语言是 C#,但我准备移植任何小型 Java 库。
  • 这是一个开源软件,所以它需要是一个开源库。
  • 它用于嵌入到桌面小部件中,因此越轻越好。
4

3 回答 3

2

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

于 2012-08-31T05:12:43.303 回答
2

您正在寻找FileSystemWatcher

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

于 2012-08-31T05:12:56.953 回答
2

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

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

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

于 2012-08-31T05:40:18.923 回答