2016-11-09 177 views
0

我正在寫一個C++應用程序,它只寫入文本文件中尚未包含的新文本,但到目前爲止我無法獲得我的實現獲得的結果沒有工作。即使文本已包含,文本也會寫入文本文件。如何僅將新文本寫入文本文件

我會做什麼錯?

以下是我迄今爲止的實施情況。

void ScanDir::qDirIteratorScanner() 
{ 
    QDirIterator it(this -> basePath, QDir::Files, QDirIterator::Subdirectories); 
    while (it.hasNext()) 
    { 
     paths = scanned(); 

     qDebug() << "Collected : " << paths.size(); 

     if (!paths.contains(it.next())) { 
      WriteToFile writeToFile(basePath, it.next()); 
      paths << it.next(); 
     } 
     else { 
      qDebug() << "Already put : " << it.next(); 
     } 
    } 

} 

QStringList ScanDir::scanned() 
{ 
    QStringList paths; 

    QFile dataFile(basePath + "data.txt"); 
    QTextStream in (&dataFile); 

    if (dataFile.open(QIODevice::ReadOnly)) 
    { 
     QTextStream in(&dataFile); 

     while (!in.atEnd()) 
     { 
      QString line = in.readLine(); 
      paths << line; 
     } 

     dataFile.close(); 
    } 

    return paths; 
} 

WriteToFile::WriteToFile(QString path, QString data) 
{ 
    path = "E:/Data.txt"; 
    QFile file(path); 
    if (file.open(QFile::Append)) 
    { 
     QTextStream stream(&file); 
     stream << data << endl; 
     qDebug() << "Writting: " << data + "\r\n"; 

    } 
} 
+0

scan()會返回您認爲應該如何處理的內容嗎? – UKMonkey

+0

是的,它確實有效,完美@UKMonkey。 –

+0

那麼,如果你的'路徑'是你所期望的那樣,那麼無論是it.next()都不是你認爲的那樣,或者路徑.contains不會做你認爲它的做法...... – UKMonkey

回答

2

您應該只調用it.next()每一次迭代: http://doc.qt.io/qt-5/qdiriterator.html#next

前進迭代到下一個條目,並返回這個新條目的文件路徑爲 。如果hasNext()返回false,則此函數不會執行 ,並返回一個空的QString。

您可以調用fileName()或filePath()來獲取當前條目文件 name或path或fileInfo()以獲取當前條目的QFileInfo。

+0

謝謝@Hans Olsson。那是我出錯的地方。 –