来自 QDataStream 的 QT read/write
QT read/write from QDataStream
我认为我对所有这些工作原理存在根本性的误解,我试图在我的 QDataStream 中组合 2 个十六进制文件,然后将它们输出到一个新的 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 和结果。
你用的QByteArray是用来读取filea和fileb文件的数据,然后写到result中的,所以肯定是读写的。您正在使用以下 QDataStream 构造函数:
QDataStream::QDataStream(const QByteArray &a)
Constructs a read-only data stream that operates on byte array a. Use
QDataStream(QByteArray*, int) if you want to write to a byte array.
Since QByteArray is not a QIODevice subclass, internally a QBuffer is
created to wrap the byte array.
并且由于 QByteArray 是只读的,因为它不是合适的构造函数,您必须使用其他构造函数:
QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode mode)
Constructs a data stream that operates on a byte array, a. The mode
describes how the device is to be used.
Alternatively, you can use QDataStream(const QByteArray &) if you just
want to read from a byte array.
Since QByteArray is not a QIODevice subclass, internally a QBuffer is
created to wrap the byte array.
使用上面我们得到以下内容:
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();
}
我认为我对所有这些工作原理存在根本性的误解,我试图在我的 QDataStream 中组合 2 个十六进制文件,然后将它们输出到一个新的 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 和结果。
你用的QByteArray是用来读取filea和fileb文件的数据,然后写到result中的,所以肯定是读写的。您正在使用以下 QDataStream 构造函数:
QDataStream::QDataStream(const QByteArray &a)
Constructs a read-only data stream that operates on byte array a. Use QDataStream(QByteArray*, int) if you want to write to a byte array.
Since QByteArray is not a QIODevice subclass, internally a QBuffer is created to wrap the byte array.
并且由于 QByteArray 是只读的,因为它不是合适的构造函数,您必须使用其他构造函数:
QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode mode)
Constructs a data stream that operates on a byte array, a. The mode describes how the device is to be used.
Alternatively, you can use QDataStream(const QByteArray &) if you just want to read from a byte array.
Since QByteArray is not a QIODevice subclass, internally a QBuffer is created to wrap the byte array.
使用上面我们得到以下内容:
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();
}