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

Using QT how can I remove the first line in a text file without reading the entire file?

本文关键字:文件 文本 删除 一行 情况下 QT 读取 使用      更新时间:2023-10-16

我正在手动将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();
}
}

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

所以

  • 或者将整个文件作为QString/QByteArray读取,剪切第一行*并将其写回

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

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