2016-11-09 19 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

あなたの 'paths'があなたが期待しているものであれば、it.next()はあなたの考えではないか、paths.containsはあなたの考えをしません。 – UKMonkey

答えて

2

反復ごとに一度しかit.next()を呼び出す必要があります: http://doc.qt.io/qt-5/qdiriterator.html#next

は、次のエントリにイテレータを進み、リターンファイルパスは です。 hasNext()がfalseを返した場合、この関数は を実行し、空のQStringを返します。

fileName()またはfilePath()を呼び出して、現在のエントリファイル の名前またはパス、またはfileInfo()を取得して、現在のエントリのQFileInfoを取得できます。

+0

ありがとう@Hans Olsson。それが私が間違っているところだった。 –

関連する問題