4

需要读取混合文本/二进制文件,我认为两者QTextStreamQDataStream用是最有效的。

该文件如下所示:

某行文本
另一行文本
42
<100 字节的二进制数据>
12
<100 字节的二进制数据>
...等(一行中的一个 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];

首先,我测试了从一个流中读取是否会推进另一个流。如果我从文件中读取 10 个字节data.readRawData(),那么stream.readLine()将读取“文本”,所以它可以工作!

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

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()根本没有读取任何内容,但它的返回值中仍然包含所需的字节数。

这是否意味着我不能一起使用QTextStreamand QDataStream,或者我做错了什么?

4

0 回答 0