4

混合テキスト/バイナリ ファイルを読み取る必要がある場合、両方QTextStreamQDataStream併用するのが最も効果的だと思いました。

ファイルは次のようになります。

Some line of text
Another line of text
42
<100 バイトのバイナリ データ>
12
<100 バイトのバイナリ データ>
... etc. (1 行に int、1 行に 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()、「テキスト」が読み取られるため、機能します。

ただし、サンプルファイルの最初から、次のようにすると:

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ですか、それとも何か間違ったことをしているのですか?

4

0 に答える 0