如何只将新文本写入文本文件

How to write only new text to a text file

本文关键字:文本 文件 新文本      更新时间:2023-10-16

我试图写一个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 + "rn";
    }
}

你应该每次迭代只调用它一次。接下来http://doc.qt.io/qt-5/qdiriterator.html

将迭代器推进到下一项,并返回的文件路径这个新条目。如果hasNext()返回false,则此函数返回false

返回一个空QString。

您可以调用fileName()或filePath()来获取当前条目文件名称或路径,或fileInfo()来获取当前条目的QFileInfo。