2017-04-19 8 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

親スレッドが1つあり、新しいディレクトリが作成されるたびにディレクトリを監視するスレッドが存在します。このようにして、すべてのディレクトリとサブディレクトリを監視する再帰的なスレッド作成を構成できます。しかし、問題は、すべてのスレッドを処理するマスターコントロールが存在しないことです。 これは良いデザインだとは思わない。誰かが私に道を示唆してください。 – sourav

答えて

0

私は同じ問題がありました。 Poco documentation

監視ディレクトリのサブディレクトリ内のファイルへの変更は報告されません。これらのディレクトリを監視する必要がある場合は、別々のDirectoryWatcherオブジェクトを作成する必要があります。

だから、実行する必要があるのは、見たい既存のサブディレクトリごとに新しいディレクトリウォッチャーを作成することです。監視しているディレクトリ内に新しいディレクトリが作成された場合は、itemAddedデリゲートにロジックを追加して新しいモニタを生成する必要があります。