混合テキスト/バイナリ ファイルを読み取る必要がある場合、両方QTextStream
をQDataStream
併用するのが最も効果的だと思いました。
ファイルは次のようになります。
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
ですか、それとも何か間違ったことをしているのですか?