使用QFile删除最后一行数据
说明:文本文档每一行之间是使用的\n
进行的间隔,所以 seek
函数进行文件偏移然后调用readline
查找到\n
时就是新的一行。这个时候seek
的位置加1就是新的一行的行首位置,seek值的大小也是我们在删除了最后一行之后文件的大小。然后我们直接调用resize(seek位置的大小)
这个时候会重新更改文件大小,文件的最后一行会自己删除掉。
//删除txt文件的最后一行数据,行与行之间使用的是换行符。
QFile file("D:/新建文本文档 (2).txt");
bool ret = file.open(QIODeviceBase::ReadWrite | QIODeviceBase::Text);
qDebug() << "open ret =" << ret;
if(ret == false)
{
return;
}
QString str = QString(file.readLine());
quint64 size = file.size() ;
if(size >=3)
{
size-=3; //这个地方是为了避免数到最后一行的换行符。
}
while(1)
{
file.seek(size);
str = QString(file.readLine());
qDebug() << "str =" << str;
if((str == "\n") || (size == 0))
{
break;
}
size --;
}
if(size == 0)
{
file.resize(0);
}
else
{
size++;
file.resize(size);
}
注意:
- 我使用的开发环境是Qt6.2 文件的打开方式参数那个地方会和Qt5及之间的版本有区别,这个地方可以改成
QIODevice
。 QFile::size()
返回的是整个文件的大小是按照字节数计算的。在UTF-8编码格式下一个汉字是3个字节,\n
是1个字节。- 这个方式对比把内容先读取到RAM然后再写入到硬盘上的优点就是,在文件过大的时候,不需要占用太多的RAM。