【问题标题】:how to watch a File System for change如何观察文件系统的变化
【发布时间】:2011-02-26 08:57:54
【问题描述】:

我正在大学的分布式系统课程中做一个项目。我正计划创建类似于 Dropbox ( getdropbox.com ) 的东西,但有一些非中心化的点对点扭曲。为此,我需要一些检测目录结构变化的方法。您认为 Dropbox 是如何做到这一点的?他们的实施效果非常好。我想知道他们是否在 windows 上使用来自 win32 api 的 FileSystemWatcher,以及依赖于 Linux 和 Mac 的类似平台。

【问题讨论】:

    标签: .net filesystems filesystemwatcher dropbox


    【解决方案1】:

    在 Mac OS X Leopard 下,有 FSEvents API,可让您注册文件系统更改通知:

    http://googlemac.blogspot.com/2008/03/file-system-change-logger-for-leopard.html

    【讨论】:

      【解决方案2】:

      在 Linux 方面,存在可怕的无证 inotify。如果你不介意使用 glib,这里有 GFileMonitor 类,它真的很容易使用。我不认为它是可移植的,所以它只适用于 Linux。

      【讨论】:

        【解决方案3】:

        eduffy 提到了 inotify ....

        我不久前看到了这个,基于 inotify。称为 incron,它为 incron 添加了类似 cron 的功能。

        http://www.linux.com/feature/144666

        【讨论】:

          【解决方案4】:

          据我所知,DropBox(等)使用 Windows 服务(或 Linux/Mac 端的守护程序)来监控文件系统。在 .Net 中创建此类非常容易,并且此场景通常是 Windows 服务的教科书示例。我相信在 C++ 中做类似的事情也会相当简单。

          这是一个简单的 .Net 教程链接,该教程介绍了如何在 Windows 上创建服务。您需要为您的解决方案做的就是在 Timer.Tick() 事件中添加您的监控逻辑。

          http://www.developer.com/net/csharp/article.php/2173801

          【讨论】:

          • 我可能会误解你打算在这里做什么。向计时器滴答添加逻辑?这是否意味着您打算获取一个目录列表并进行比较?不!不要那样做!
          • 不,永远不要使用计时器。在 Windows 中,使用 FileSystemWatcher - 在 Mac 上使用 FSEvents。抱歉,即使它已经被接受,也不得不否决这个答案。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-13
          • 1970-01-01
          相关资源
          最近更新 更多