需要读取混合文本/二进制文件,我认为两者QTextStream
并QDataStream
用是最有效的。
该文件如下所示:
某行文本
另一行文本
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()
根本没有读取任何内容,但它的返回值中仍然包含所需的字节数。
这是否意味着我不能一起使用QTextStream
and QDataStream
,或者我做错了什么?