2016-11-09 178 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。那是我出错的地方。 –