2017-04-19 11 views
2

如何使用POCO創建多深度目錄觀察器?使用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

那麼,我明白,我必須使用線程,每當創建一個新的目錄時,這些線程將單獨保存這些目錄。那是這樣嗎? – sourav

+0

好吧,可以有一個父線程,並且無論何時創建一個新目錄,都會有一個線程來監視目錄。以這種方式,我們可以形成一個遞歸線程創建來監視所有的目錄和子目錄。但是,問題是,不會有任何主控制來處理所有的線程。 我不認爲這是一個很好的設計。有人請告訴我方式。 – sourav

回答

0

我有同樣的問題。根據Poco documentation

請注意,不會報告對已監視目錄的子目錄中文件的更改。必須爲這些目錄創建單獨的DirectoryWatcher對象,才能監視它們。

所以你需要做的是爲每個你想要觀察的子目錄產生一個新的目錄觀察器。如果在您正在監視的目錄中創建新目錄,您還需要在itemAdded委託中放置一些邏輯以生成新的監視器。