2012-07-26 84 views
2

我遇到以下問題:我創建了QFileSystemWatcher,它在Linux上運行良好,但在Windows 7上無法正常工作。您是否可以在代碼中發現可能導致它無法工作的任何內容?Windows上的Qt QFileSystemWatcher

Thx。

這裏是初始化代碼:

mConfigChangeWatcher = new QFileSystemWatcher(); 
mConfigChangeWatcher->addPath(config_file_name); 

QObject::connect(mConfigChangeWatcher, 
       SIGNAL(fileChanged(QString)), 
       this, 
       SLOT(configFileChanged(QString))); 

,這應該是插槽得到所做的工作:

void MyClass::configFileChanged(const QString &file) 
{ 
    qDebug() << "Changed: " << file ; 
} 
+0

可能的路徑有以不同的方式表示重新添加呢? – 2012-07-26 12:43:39

+0

路徑如下:'(「C:/Users/fela/work/d_RTI-1638/build/Applications/Debug/conf/configuration.xml」)(這是mConfigChangeWatcher-> files的輸出() – fritzone 2012-07-26 12:45:25

+0

我寫了一個簡單的應用程序,它的工作原理也許對我們來說,這與我們將應用程序移動到另一個線程,然後以某種方式發送信號會丟失... – fritzone 2012-08-06 07:33:39

回答

3

當您檢查文件是否被添加到監視器在文件第一次修改後使用QFileSystemWatcher::files()方法是否得到正確的列表?

我曾經遇到過這樣的問題,即某些應用程序在修改文件時,將舊文件從系統中刪除並重新寫入。

請注意,QFileSystemWatcher一旦它們被重命名或從磁盤中刪除就會停止監視文件,並且一旦它們從磁盤中刪除,QFileSystemWatcher就會停止監視它們。

我正在使用QFileSystemWatcher觀看Photoshop編輯的圖像文件。不知怎的,文件從被監視的文件列表中被刪除。

+0

謝謝!我甚至沒有假設文件可以被刪除,然後當你保存它時創建它是一些應用程序,這就解釋了爲什麼我的QFileSystemWatcher在我編輯它時會停止監視一個文件 – Dmitriy 2014-02-06 13:48:07

+0

順便說一句,我仍然不知道處理這個問題的正確方法我的解決方法是使用單擊定時器,然後添加文件再次被監視。這不適用於所有情況,但在當時解決我的問題。 – McLeary 2014-02-06 23:50:42

+0

:)我使用完全相同的解決方法。我正在考慮的另一個解決方法是監視包含該文件的目錄。但第一個更簡單,適合我 – Dmitriy 2014-02-07 11:23:38

1

我有同樣的問題,並解決它非常快。 在管理fileChanged信號的插槽中,我注意到路徑從files()中消失。我只是做一個檢查,如果有必要

if (! watcher_.files().contains(path)) 
{ 
    watcher_.addPath(path); 
} 

我希望這有助於

法比奧