使用Poco的多深度目录观察器

时间:2017-04-19 13:48:08

标签: c++ poco-libraries

如何使用POCO创建多深度目录观察程序?

如果它主要位于 D:\ ddd ,我们甚至会转到 D:\ ddd \ d1 \ d2 \ d3 \ NewTextDoc.txt ,那么它也是应该通知我。 我只能在初始目录中执行此操作。 我使用了事件监听器,如果初始目录中发生任何事情,他们会通知我。

这是我的代码:

try
{
  AutoPtr<PropertyFileConfiguration> pConf = new 
  PropertyFileConfiguration("EventListener.properties");
  Poco::DirectoryWatcher dirWatcher(pConf->getString("path"), 
  Poco::DirectoryWatcher::DW_FILTER_ENABLE_ALL, 
  Poco::DirectoryWatcher::DW_DEFAULT_SCAN_INTERVAL);

  dirWatcher.itemModified       += Poco::delegate(this, &ClsDirWatcher::onFileModified);        //good
  dirWatcher.itemMovedFrom      += Poco::delegate(this, &ClsDirWatcher::onFileMovedFrom);       //no way, seems only linux
  dirWatcher.itemMovedTo        += Poco::delegate(this, &ClsDirWatcher::onFileMovedTo);         //no way, seems only linux
  dirWatcher.itemAdded          += Poco::delegate(this, &ClsDirWatcher::onFileAdded);           //working fine
  dirWatcher.itemRemoved        += Poco::delegate(this, &ClsDirWatcher::onFileRemoved);         //lol!!!

  waitForTerminationRequest();    
}
catch (Poco::Exception& exc)
{
  logger().log(exc);
}

1 个答案:

答案 0 :(得分:0)

我有同样的问题。根据{{​​3}}:

  

请注意,不会报告对监视目录的子目录中的文件所做的更改。如果要监视这些目录,则必须为这些目录创建单独的DirectoryWatcher对象。

因此,您需要做的是为要监视的每个现有子目录生成一个新的目录监视器。如果在您正在监视的目录中创建了新目录,则还需要在itemAdded委托中放置一些逻辑以生成新监视器。