使用QT,如何在不读取整个文件的情况下删除文本文件的第一行?

时间:2019-01-25 15:47:25

标签: c++ qt logging text

我正在将事件从我的QT应用程序手动记录到文本文件中。

我一直在跟踪写入文本文件的行数,当超过一定数量时,我要开始删除第一行。

当文本文件变大时,我不希望每次删除第一行时都打开并阅读整个文本文件。

这是我到目前为止所拥有的:

if (file.open(QIODevice::Append)) {
    QTextStream stream(&file);
    stream << timeStamp+typeStamp+" "+message << endl;
    stream.flush();
    file.close();
    LOG_COUNT++;
} else {
    qWarning()<<"Utils::writeToLog - unable to write to log file";
}

if(LOG_COUNT > 5000){
    LOG_COUNT--;

    QFile inputFile(filename);
    if (inputFile.open(QIODevice::ReadWrite))
    {
       QTextStream in(&inputFile);
       QString line1 = in.readLine();
       QString line2 = in.readLine();

        qWarning()<<"LINE 1 "<<line1;
        qWarning()<<"LINE 2 "<<line2;

        //Replace line 1 & 2 with just line 2?

       inputFile.close();
    }
}

1 个答案:

答案 0 :(得分:3)

如果不创建临时文件,则无法从文件开头剪切某些内容。

所以

  • 您要么以QString / QByteArray的形式读取整个文件,然后将第一行*切碎并写回

  • 打开文件,找到第一行结尾的偏移量*,然后关闭文件,然后再次打开以将剩余字节写入临时文件,然后将其重命名为原始文件。

[*]使用QTextStream :: readLine()或读取字节,直到找到'\ n'或'\ r',具体取决于您的平台。