Qt写二进制文件头部多出四个字节问题解决

问题描述

在linux系统下用qt写二进制文件时,使用QDataStream类进行存储文件。结果查看到每次写入都会在头部多出四个字节的长度。如下图所示:
在这里插入图片描述

问题分析

写入二进制文件代码如下:

QFile file(m_File);
if (!file.open(QIODevice::WriteOnly|QIODevice::Append))
{
	qDebug() << "File cannot open!";
	return;
}
QDataStream out(&file);
out << ba << appendtimeflag();  //函数返回一个7字节长度的时间戳字符串(年月日时分秒)
file.flush();
file.close();

使用linux下的xxd命令查看生成的二进制文件内容。

xxd -g 1 xxx.dat  //二进制文件名

显示结果如上图,55 BB前多了 00 00 00 1e,时间戳前多了00 00 00 07,多出四字节的int值正好是后面紧跟二进制数据的长度。应该是QDataStream自动添加的头,找了一下QDataStream类,发现产生的原因是QDataStream的构造函数实际上是QDataStream(QByteArray*, int);但没有发现如何不输出这个长度头。

修正

舍弃QDataStream类写文件,使用QFile类的写法。。如下:

QFile file(m_File);
if (!file.open(QIODevice::WriteOnly|QIODevice::Append))
{
	qDebug() << "file cannot open!";
	return;
}
ba += appendtime();
file.write(ba);
file.flush();
file.close();

读取生成文件的结果如下图,没有问题了。
在这里插入图片描述

写在最后

经过这次,以后恐怕是不敢再用QDataStream类写文件了。自动加头并在输出中体现,这个鸡肋又多余的功能不知道是那位大神编写的。

猜你喜欢

转载自blog.csdn.net/lusanshui/article/details/85341824