从QDataStream读取/写入QT

QT read/write from QDataStream

本文关键字:写入 QT 读取 QDataStream      更新时间:2023-10-16

我想我对这一切的工作方式有一个根本的误解,我试图在我的QDataStream中组合两个六进制文件,然后将它们输出到一个新的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);

结果只是一个空文件,有什么建议吗?

您有以下错误:

  • 如果你只想读取一个文件,你必须用ReadOnly模式打开它,如果你要写入它,你必须使用WriteOnly,在你的情况下,你没有filea、fileb和result。

  • 您正在使用的QByteArray读取filea和fileb文件的数据,然后将其写入结果,因此它必须是读写的。您正在使用以下QDataStream构造函数:

QDataStream::QDataStream(const QByteArray&a(

构造对字节数组a进行操作的只读数据流。使用如果要写入字节数组,请使用QDataStream(QByteArray*,int(。

由于QByteArray不是QIODevice子类,因此内部的QBuffer是为包装字节数组而创建的。

由于QByteArray不是合适的构造函数,因此它是只读的,因此您必须使用其他构造函数:

QDataStream::QDataStream(QByteArray*a,QIODevice::OpenMode模式(

构造一个对字节数组a进行操作的数据流。模式描述了如何使用该设备。

或者,如果您只是想要从字节数组中读取。

由于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();
}