我想我对这一切的工作方式有一个根本的误解,我试图在我的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();
}