【问题标题】:QT read/write from QDataStreamQT 从 QDataStream 读/写
【发布时间】:2025-09-07 23:45:01
【问题描述】:
我认为我对这一切的工作原理有一个根本的误解,我试图在我的 QDataStream 中组合 2 个 hexfile,然后将它们输出到一个新的 QFile。
QFile filea( file1 );
QFile fileb( file2 );
QByteArray ba;
QDataStream ds(ba);
ds << filea.readAll();
ds << fileb.readAll();
QFile result("C:/Users/Aaron/Desktop/mergedfile.txt");
result.open(QIODevice::ReadWrite);
result.write(ba);
结果只是一个空文件,有什么建议吗?
【问题讨论】:
标签:
c++
qt
qt5
qdatastream
【解决方案1】:
您有以下错误:
QDataStream::QDataStream(const QByteArray &a)
构造一个对字节数组 a 进行操作的只读数据流。采用
QDataStream(QByteArray*, int) 如果要写入字节数组。
由于 QByteArray 不是 QIODevice 子类,因此在内部是一个 QBuffer
创建用于包装字节数组。
并且由于 QByteArray 是只读的,因为它不是适当的构造函数,因此您必须使用另一个构造函数:
QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode 模式)
构造一个对字节数组 a 进行操作的数据流。模式
描述如何使用该设备。
或者,你可以使用 QDataStream(const QByteArray &) 如果你只是
想从字节数组中读取。
由于 QByteArray 不是 QIODevice 子类,因此在内部是一个 QBuffer
创建用于包装字节数组。
使用上面我们得到以下内容:
QFile filea( file1 );
QFile fileb( file2 );
QFile result("C:/Users/Aaron/Desktop/mergedfile.txt");
if(filea.open(QIODevice::ReadOnly) && fileb.open(QIODevice::ReadOnly) && result.open(QIODevice::WriteOnly)){
QByteArray ba;
QDataStream ds(&ba, QIODevice::ReadWrite);
ds << filea.readAll();
ds << fileb.readAll();
result.write(ba);
result.flush();
}