【问题标题】:C#: check a folder for changes at regular intervals?C#:定期检查文件夹是否有更改?
【发布时间】:2012-08-31 05:10:57
【问题描述】:

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

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

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

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

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

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

注意:

  • 我无权访问任何 VCS 二进制文件,例如 git 或 svn。
  • 语言是 C#,但我已准备好移植任何小型 Java 库。
  • 这是for an open source software,所以它需要是一个开源库。
  • 用于嵌入到桌面小部件中,所以越轻越好。

【问题讨论】:

  • 如果您不熟悉 FileSystemWatcher 类,请查看 msdn.microsoft.com/en-us/library/…。
  • @JTA:对不起,我应该更清楚一点:我不能一直依赖我的程序运行。当我的程序关闭时,文件可能会更改。所以看来我不能使用 FileSystemWatcher。

标签: c# sqlite version-control


【解决方案1】:

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

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

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

【讨论】:

  • +1 你准确地描述了我的需求。我的问题是:是否已经有一个图书馆可以做到这一点?这似乎是一个相当普遍的任务,可以在不同的项目中重用。我宁愿不重新发明轮子。您的回答似乎表明现在没有这样的库,我应该实现自己的?
  • 我开始实现我自己的(使用 SQLite),作为我软件的一部分。开源,随意复用:github.com/nicolas-raoul/CmisSync
  • 非常酷,我总是对有多少人使用我的一些开源软件感到惊讶。
  • 您是否在 C# 上维护 SQLite?太棒了:-)
【解决方案2】:

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

【讨论】:

  • 对不起,我应该更清楚一点:我不能依赖我的程序一直运行。当我的程序关闭时,文件可能会更改。所以看来我不能使用 FileSystemWatcher。
【解决方案3】:

您正在寻找FileSystemWatcher

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

【讨论】:

  • 对不起,我应该更清楚一点:我不能依赖我的程序一直运行。当我的程序关闭时,文件可能会更改。所以看来我不能使用 FileSystemWatcher。
猜你喜欢
  • 2014-05-17
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 2018-09-13
  • 2011-04-08
  • 2022-01-23
  • 2018-05-04
  • 1970-01-01
相关资源
最近更新 更多