Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可以混合使用QTextStream和QDataStream吗?_C++_Qt_File Io - Fatal编程技术网

C++ 可以混合使用QTextStream和QDataStream吗?

C++ 可以混合使用QTextStream和QDataStream吗?,c++,qt,file-io,C++,Qt,File Io,需要读取混合文本/二进制文件,我认为同时使用QTextStream和QDataStream将是最有效的 该文件如下所示: 一行文字另一行文字4212。。。等等 在一行中输入int,然后在一行中输入100字节的二进制数据,依此类推) 以下是初始化、变量等: // a QFile named in is already opened successfully as binary (without QIODevice::Text) QTextStream stream(&in); QDataS

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

该文件如下所示:

一行文字另一行文字42

12


。。。等等 在一行中输入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();
}
它不工作,缓冲区仍然为空。奇怪的是,数字(42、12等)被正确地读入
nr
,而不管我用
data.readRawData()读入多少字节。它可以是1000字节,但似乎仍然没有读取任何内容。但是,
nr_bytes
中的值表示字节已成功读取!更奇怪的是,循环中的最后一个readLine实际上读取二进制数据(至少在遇到零、换行符或其他特殊字符之前)。这意味着,
data.readRawData()
根本没有读取任何内容,但其返回值中仍有所需的字节数


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

我用
std::ifstream
解决了这个问题,在那里你可以混合
read()
getline()
操作符>()
很好。然而,我仍然很好奇如何使用
Qt
流实现同样的效果。