2012-09-27 41 views
0

我需要monitore一個文件系統,我有瀏覽文件夾和文件遞歸併增加他們的路徑,我QFileSystemWatcher功能:「QFileSystemWatcher:無法添加路徑」,但仍然有效

void watchFileSystem(const QDir& dir, QFileSystemWatcher& watcher) 
    { 
     watcher.addPath(dir.absolutePath()); 
     QDirIterator iterator(dir.absolutePath(), QDirIterator::Subdirectories); 
     while (iterator.hasNext()) { 
      QString foldername = QString(iterator.fileName()); 
      if (foldername != "." && foldername != ".." && foldername != "") 
       watcher.addPath(iterator.filePath()); 
      iterator.next(); 
      if (!iterator.fileInfo().isDir()) { 
      watcher.addPath(iterator.filePath()); 
      } 
     } 
    } 

在運行時,每個「watcher.addPath(iterator.filePath());」我在控制檯中有這樣的錯誤消息:

QFileSystemWatcher:無法添加路徑:C:/.../ anyfile.ext

最奇怪的是,它的工作原理呢。當我重命名/編輯文件或文件夾時,會觸發fileChanged和folderChanged事件。

任何人都知道發生了什麼? 我很擔心我的程序不穩定,這個錯誤無法顯示。

感謝您的閱讀和幫助,

拉斐爾。

回答

1

顯示警告是因爲你的循環將文件添加兩次:

在循環的中間,你做iterator.next();。 如果將迭代器移動到文件中,它將被添加到下一個if語句中。現在你的循環繼續,但仍然指向同一個文件。如果文件夾名稱不是「。」,「..」或「」,即不是文件,則會再次添加相同的文件。

我重組你的循環,使其工作:

while (iterator.hasNext()) 
{  
    QString fileOrFolderName = QString(iterator.fileName()); 

    // Skip non-folders 
    if (fileOrFolderName == "." || fileOrFolderName == ".." || 
     fileOrFolderName == "") 
    { 
     iterator.next(); 
     continue; 
    } 

    // Add the folder or file 
    watcher.addPath(iterator.filePath()); 
    iterator.next(); 
} 

這將增加提供給函數的目錄下的所有文件夾和文件。

相關問題