我认为我对所有这些工作原理都有基本的误解,我试图在我的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);
结果只是一个空文件,有什么建议吗?
答案 0 :(得分:0)
您遇到以下错误:
如果仅要读取文件,则必须以ReadOnly模式打开它;如果要写入文件,则必须使用WriteOnly,在这种情况下,filea,fileb和结果。
您正在使用它的QByteArray读取filea和fileb文件的数据,然后将其写入结果,因此必须对其进行读写。您正在使用以下QDataStream构造函数:
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();
}