从POCO DirectoryWatcher收到的重复事件

时间:2014-07-17 14:46:36

标签: c++ linux poco-libraries

我正在尝试使用POCO文件系统库中的DirectoryWatcher类来监视特定文件夹的更改。代码很简单,看起来像这样:

Monitor::Monitor() {
    pattern = new Glob("/path/to/dir/*.dat",
                       Glob::GLOB_DOT_SPECIAL);

    watcher = new DirectoryWatcher(std::string("/path/to/dir"));

    watcher->itemAdded += delegate(this, &Monitor::onFileAdded);
    watcher->itemModified += delegate(this, &Monitor::onFileChanged);
}

void Monitor::onFileAdded(const DirectoryWatcher::DirectoryEvent& addEvent) {
    if (pattern->match(addEvent.item.path())) {
        std::cout << "File added: " << addEvent.item.path() << std::endl;
    }
}

void Monitor::onFileChanged(const DirectoryWatcher::DirectoryEvent& changeEvent) {
    if (pattern->match(changeEvent.item.path())) {
        std::cout << "File changed: " << changeEvent.item.path() << std::endl;
    }
}

我正在观察一些奇怪的行为。如果我将文件的新版本复制到已经在监视文件夹中的文件,我会收到两次“项目已更改”通知。如果我打开已经在监视文件夹中的文件,编辑其内容并保存,我会收到“已添加项目”通知,然后是“项目已更改”通知。

这是在Ubuntu Linux 14.04和带有POCO 1.4.6p2的ext4文件系统上。

还有其他人观察过类似行为吗?这可能与我的机器和OS /文件系统组合的某些特定特性有关吗?是否有可能以某种方式过滤不需要的事件?

提前致谢。

0 个答案:

没有答案