0

私はgzstreamを使用してC++プログラムからの出力を書き込んでいます。zcat: output.txt.gz: unexpected end of fileただし、自分のプログラムでエラーが返されない場合でも、結果のファイルが正しく書き込まれていないように見えることがあります。

したがって、ファイルの書き込み中にエラーをキャッチしたいと思います。つまり、プログラムがzcatを実行し、上記のエラーを確認するまで待つ必要はありません。

これが私のコードの関連部分です:

ogzstream outStream;
outStream.open ("output.txt.gz");
if (! outStream.is_open()) { cerr << "error while opening" << endl; exit (1); }
for (size_t i = 0; i < vecResults.size(); ++i)
    outStream << i << " " << vecResults[i] << endl;
outStream.close();

何を改善できますか?で書き込んだ後、エラービットをチェックする必要があり<<ますか?または閉じた後?はいの場合、どうすればそれを行うことができますか?

(参考までに、エラーが発生するのはまれですが、煩わしいほど頻繁に発生するため、エラーを再現するのは非常に困難です。)

4

1 に答える 1

1

outStream.good()エラーチェックが内部で適切に実装されていると仮定すると、閉じた後に結果をチェックできるはずです。

または、メンバーを使用してexceptions(...)、エラーが発生した場合にスローされる例外を要求することもできます。

編集:エラービットは自動的にリセットされないため、最後に確認するだけで安全です。途中で失敗した場合は、最後に確認できます。

于 2012-08-06T17:59:53.103 に答える