监视文件夹以进行更改

时间:2011-01-31 06:53:02

标签: filesystems operating-system

我正在开发一个项目,该项目需要一个应用程序来监视用户为更改指定的目录列表。此外,我想让用户选择将应用程序作为服务运行或单独运行。由于用户可以选择单独运行它,因此我不认为通过添加或删除文件(如果存在此类事件)来触发某些操作系统事件就足够了。我想过可能会计算最深文件夹的校验和,然后再建立。然后,我可以在后续扫描中比较这些校验和,以尝试确定发生更改的位置。这是一个合适的解决方案;如果不是以有效的方式做到这一点的最佳方式是什么?

此外,我不太清楚如何标记这一点,如果你有任何建议让我知道,我会像我认为的那样。

编辑:我需要这种方法才能在Windows,OS X和Linux上工作

4 个答案:

答案 0 :(得分:2)

在Mac OSX上,您可以使用FSEvent,这类似于Linux上的inotify接口。

答案 1 :(得分:1)

有几种跟踪变化的方法。

最简单的方法是扫描计时器上的目录并比较时间戳和文件大小。然而,这是耗费资源的并且可能遗漏一些改变(例如,如果文件在检查之间改变两次,则将错过第一次改变)。

接下来,可以使用FindFirstChangeNotification Windows API函数(但它有自己的局限性)。

最复杂,最可靠的方法是使用文件系统过滤器驱动程序。在Windows上,我们可以使用CallbackFilter。在MacOS X上,可以创建一个过滤器驱动程序,但我不知道任何类似于CallbackFilter的现成产品。在Linux上,可以使用inotify

答案 2 :(得分:0)

如果文件系统支持CIFS / SMB protcol,您可以考虑在协议中更改通知功能。 有关CIFS概述,请参阅http://msdn.microsoft.com/en-us/library/aa302188.aspx

答案 3 :(得分:0)

man kqueue

(至少,这就是我在我最常用的目标操作系统上的表现 - 但你应该在帖子中指明这一点)