【问题标题】:Monitoring folders for changes监视文件夹的更改
【发布时间】:2011-06-18 09:54:20
【问题描述】:

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

另外,我不太确定要标记什么,所以如果您有任何建议,请告诉我,我会按照我认为合适的方式进行。

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

【问题讨论】:

    标签: filesystems operating-system


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      有几种方法可以跟踪更改。

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

      接下来,可以使用FindFirstChangeNotification Windows API 函数(虽然它有它自己的限制)。

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

      【讨论】:

        【解决方案3】:

        man kqueue

        (至少,这就是我在我最常针对的操作系统上这样做的方式 - 但你应该在你的帖子中指定这一点)

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-26
            • 2016-11-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多