2015-04-14 94 views
0

我嘗試使用QFileSystemWatcher來監視彙編列表及其子彙編。它工作正常,但當我捕捉信號directoryChanged時,路徑指向的目錄中添加的新文件是未知的。 要知道新的文件,程序啓動時,我列出了QDirIterator的文件,我把結果保存在一個QStringList中:文件清單和Qt空結果

dirIt = new QDirIterator(ui->lineRepProjets->text(), QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); 
fileList = new QStringList(); 
while (dirIt->hasNext()) 
{ 
    qDebug() << "FILE : " << dirIt->fileName(); 
    *fileList << dirIt->next(); 
} 
delete dirIt; 

後,當我趕上了信號,我做的其他列表劇目和我比較。

問題是結果不正確!正如你所看到的,我在qDebug中打印每個找到的文件的fileName。 我有這樣的結果:

文件: 「」 FILE: 「Bonjour.txt」 FILE: 「hello.txt的」

而在我的劇目之一,我有3個文件: 「Bonjour.txt」 ,「Hello.txt」和「Test.txt」

所以在我的QStringList中,我有一個空字符串,我沒有「Test.txt」文件,我不明白我的錯誤在哪裏。

謝謝你的幫助!

編輯:

我解決了我的問題與您的幫助,謝謝!最終代碼是:

QDirIterator fileIt(ui->lineRepProjets->text(), QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); 
fileList = new QStringList(); 
do 
{ 
    *fileList << fileIt.next(); 
} while (fileIt.hasNext()); 

回答

0

的問題是,你不斷加入下一個文件名列表。有一點,你的迭代器指向最後一個元素後面的元素,因此是空字符串。

我會循環改成這樣:

do 
{ 
    qDebug() << "FILE : " << dirIt->fileName(); 
    *fileList << dirIt->fileName(); 
    dirIt->next(); 
} 
while (dirIt->hasNext()); 
+0

您的解決方案可能會更好,但它不起作用,因爲dirIt-> fileName();在開始時包含一個空字符串,我不明白爲什麼!這對我來說是一個真正的問題.....要獲得第一個文件名,我必須寫dirIt-> next; qDebug()<< dirIt-> fileName(); !!!! – DeepSiderZ

+0

我編輯了我的第一條消息,我已經解決了我的問題,謝謝! – DeepSiderZ

2

由於最後一個文件沒有下一個文件,因此無法獲取最後一個文件名。 dirIt->hasNext()返回false最後文件

http://doc.qt.io/qt-4.8/qdiriterator.html#hasNext

也許是醜陋的,但你可以使用此代碼:

while (dirIt->hasNext()) 
{ 
    qDebug() << "FILE : " << dirIt->fileName(); 
    *fileList << dirIt->next(); 
} 

qDebug() << "FILE : " << dirIt->fileName(); 
*fileList << dirIt->next(); 
+0

哦,是的這是真的.....我那麼應該如何找回過去的文件的名稱?我如何防止添加空字符串? – DeepSiderZ

+0

我試圖寫這個:while(dirIt-> fileName()!=「」)但問題是我在第一個空字符串.... – DeepSiderZ

+0

這是醜陋的,但它的作品,謝謝你! – DeepSiderZ