是否可以混合QTextStream和QDataStream?

时间:2013-04-25 04:53:51

标签: c++ qt file-io

需要阅读混合文本/二进制文件,我认为同时使用QTextStreamQDataStream将是最有效的。

该文件如下所示:

  

某行文字
另一行文字
42 <&lt; 100字节   二进制数据&gt;
12&lt; 100字节的二进制数据&gt;
......等   一行中的int,然后是一行中的100字节二进制数据,依此类推)

这是初始化,变量等:

// a QFile named in is already opened successfully as binary (without QIODevice::Text)
QTextStream stream(&in);
QDataStream data(&in);
int nr;
int nr_bytes;
char buffer[200];

首先,我测试了从一个流读取是否推进另一个流。如果我从文件中读取带有data.readRawData()的10个字节,那么stream.readLine()将读取“of text”,因此它可以正常工作!

但是,如果我从示例文件的开头执行以下操作:

stream.readLine();
stream.readLine();
for (/*...*/)
{
    stream >> nr;
    stream.readLine();
    nr_bytes = data.readRawData(buffer, 100);
    stream.readLine();
}

它不起作用,缓冲区仍为空。奇怪的是,无论我用nr读取了多少字节,数字(42,12等)都被正确读入data.readRawData()。它可以是1000字节,它似乎仍然没有读取任何东西。但是,nr_bytes中的值表示字节已成功读取!还是奇怪的是,循环中的最后一个readLine实际上读取了二进制数据(至少在它遇到零,换行或其他特殊字符之前)。这意味着,data.readRawData()根本没有读取任何内容,但它的返回值仍然包含所需的字节数。

这是否意味着我不能同时使用QTextStreamQDataStream,或者我做错了什么?

0 个答案:

没有答案