从QDataStream读取/写入QT
QT read/write from QDataStream
我想我对这一切的工作方式有一个根本的误解,我试图在我的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();
}
相关文章:
- Qt 写入 xml: QIODevice::write (QFile, "D:/logs.xml" ): 设备未打开
- 从QDataStream读取/写入QT
- Qt - 如何将"more"数据写入QProcess?
- Qt TCP 套接字 - 写入超过 15 个字节
- Qt QProcess 如何写入标准?
- 写入和读取十六进制 TRAM QT 串行端口
- 为什么当我使用双精度时,Qt<->Matlab 正确写入和读取我的字节,但存储 uint32 的字节不正确?
- 写入文本文件错误,QT
- Qt cpp - 将QString写入文本文件的干净方法
- 在Qt中使用工作线程将数据写入文件的正确方法是什么?
- 无法写入文件 pri:无法在 QT mac OS 中创建父目录
- 使用 qt 从 postgres 读取和写入图像(大对象)
- 在常量引用获取器上读取写入互斥锁(使用 Qt)
- QT-写入SQL数据库时,空的qlineedits不会以null的方式传递
- 在Qt控制台应用程序中读取和写入QProcess
- QT:将结构写入文件
- 如何从命名管道获取结构化数据并将其写入Qt中的qtableview
- Udp 在 QT 定时器信号中写入数据报
- 使用 c++ / qt 在二进制文件中写入法语字符
- 将QVector写入Qt中的文本文件