如何使用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);
}
答案 0 :(得分:0)
我有同样的问题。根据{{3}}:
请注意,不会报告对监视目录的子目录中的文件所做的更改。如果要监视这些目录,则必须为这些目录创建单独的DirectoryWatcher对象。
因此,您需要做的是为要监视的每个现有子目录生成一个新的目录监视器。如果在您正在监视的目录中创建了新目录,则还需要在itemAdded
委托中放置一些逻辑以生成新监视器。