监视文件夹的更改

监视文件夹的更改

问题描述:

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

另外,我不太清楚该如何标记,因此如果您有任何建议让我知道,我会尽我所能。

编辑:我需要这个方法在Windows,OS X的工作,最好的Linux

存在用于跟踪变化的几种方法。

最简单的方法是扫描定时器上的目录并比较时间戳和文件大小。然而,这是耗费资源的,并且可能会丢失一些更改(例如,如果文件在两次检查之间改变了两次,第一次更改将被忽略)。

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

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

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

man kqueue

(至少,这就是我怎么会做我最经常有针对性的操作系统 - 但是你应该在您的文章中指定此)

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