【问题标题】:Cross platform C++ filesystem watcher跨平台 C++ 文件系统观察者
【发布时间】:2012-04-15 17:27:47
【问题描述】:

我正在寻找一个跨平台的文件系统观察器,类似于 .NET 中的FileSystemWatcher 类。因为它是一个守护进程/服务,所以我不喜欢 Qt 的QFileSystemWatcher。我真的很想避免它,因为我不想依赖 Qt,因为我的程序将成为一个守护进程。

我还看到了 proposal 将此类类包含在 Boost 中,但据我所知,尚未包含此类类。

是否有跨平台的 C++ 文件系统观察程序?

【问题讨论】:

    标签: c++ filesystems cross-platform filesystemwatcher


    【解决方案1】:

    Qt分为modules,所以使用这个功能并不意味着你必须使用GUI库。

    QFileSystemWatcher 位于QtCore,它没有 GUI 功能。

    【讨论】:

    • 我正要这么说。他仍然可以争辩说 QtCore 太大了。但是,是的,考虑到需要在同一实现中支持 inotify、kqueue、WaitForMultipleObjects 的工作量,这仍然是一个公平的交易。
    • wxWidgets 也有a wxFileSystemWatcher 实现,但有一些限制。
    • @dschulz,并考虑到他正在与 .NET System.dll(以及 System.dll 直接或间接依赖于给定平台的所有内容)进行比较,后者并不以纤巧而闻名。
    • .NET 并不苗条,但这与问题无关。 QtCore 相当重,它包含大量我不感兴趣的东西。
    • 这可能是我们最接近跨平台文件系统观察器的地方了。
    【解决方案2】:

    我没有使用过这个(我来这个问题寻找替代品),但http://code.google.com/p/simplefilewatcher 似乎是一个不错的选择。它目前没有维护,但相关的 API 可能相当稳定。如果我使用这个库,我会尽量记住更新这个答案。

    【讨论】:

    • simple file watcher 由于使用 kqueue 而在 mac osx 上受到限制。 QFileWatcher 是你想要使用的。
    【解决方案3】:

    作为替代方案,还有“Entropia File System Watcher”

    https://bitbucket.org/SpartanJ/efsw 是 simple-file-watcher 的一个分支。

    efsw 目前支持以下平台:

    Linux 通过 inotify

    通过 I/O 完成端口的 Windows

    Mac OS X 通过 FSEvents 或 kqueue

    FreeBSD/BSD 通过 kqueue

    独立于操作系统的通用观察器(轮询磁盘的目录 快照并定期比较它们)

    如果任何后端由于任何原因无法启动,它将回退 到独立于操作系统的实现。

    【讨论】:

      【解决方案4】:

      为了完整起见,还值得一提的是 Poco 的DirectoryWatcher

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 2012-02-07
        • 1970-01-01
        相关资源
        最近更新 更多