如果尚未编写文本,如何将文本写入文本文件

时间:2016-11-08 17:06:07

标签: c++ qt

仅当文本文件中尚不存在文本时,我才想将文本添加到文本文件中。我的下面的实现添加了文本,即使它已经存在。如何修复我的实现只添加新的不存在的项?

到目前为止我的实施:

WriteToFile::WriteToFile(QString data)
{
    path += "C:/Data.txt";
    QFile file(path);
    if ( file.open(QFile::Append) )
    {
        QTextStream in (&file);
        QString line;
        do {
            line = in.readAll();
            qDebug() << in.readLine();

            if (!line.contains(data)) {
                QTextStream stream( &file );

                data += "\r\n";

                stream << data << endl;
            }
        } while (!line.isNull());
    }
}

1 个答案:

答案 0 :(得分:1)

你要么:

  • 解析整个文件并从中提取所有路径或
  • 跟踪写入文件的所有路径,以避免一次又一次地解析它

从简单来看,只需创建一个QSet<QString> writtenSoFar,并为每个路径检查集合是否包含它,如果是,则跳过写入,如果没有,写入并将其附加到集合。在第一种情况下,您必须将解析后的路径写入集合中,以便进行单一检查,效率极低,就像解析本身一样。因此,您可以更好地跟踪路径。

该集合对于提供良好的查找性能非常重要。它非常快,因为它基于散列,它基本上是一个无值QHash