2016-06-01 18 views
1

私は、特定の設定に応じていくつかのファイルを書き込むアプリケーションを持っています。ときには通常のstd:ostreamを使用することもあれば、opencvで書き込むこともあれば、boostで書くこともあります。C++でのファイル書き込みエラーを検出する一般的な方法はありますか?

std:ostream rdstate()関数の場合。 私の意見では、(osのような)一般的な方法を使うことができれば、各メカニズムでうまくいくというのが最善の解決策です。 ありますか?

もしそうでなければ、rdstate()と同様のチェックについてのドキュメントを私に指摘できますか? おかげ

更新:
を、私は、これらの機能を持つファイルを書き込む:
OpenCVの:cv::VideoWriter << image
ブースト:boost::iostreams::file_sink->write

私はbosst場合のために書かれたデータをチェックする方法を発見しました。 write関数は、書き込まれたバイト数を返します。これを予想バイト数と比較することができます。 openCVの場合、私はGetFileAttributesExを使用してファイルサイズを決定し、それが増加するかどうかを確認します。 これは良い方法ですか?

+0

すべてのオペレーティングシステムで動作する方法をお探しですか? – Ian

+0

いいえ、私はただの窓が必要です – Valerie

+0

エラーをチェックする一般的な方法は、GetLastError()を呼び出すことです。 – Ian

答えて

0

ファイルに書き込む基本的なオペレーティングシステム呼び出しでエラーが返された場合は、std::ostreamfail()の状態になると予想されます。

明示的なclose()の後も含めて、std::ostreamの状態をチェックするだけで、バッファリングされたデータの最終ビットの書き込みエラーが発生する可能性があります。

+1

' std :: ostream'をブーストやopencvの書き込みが失敗した後にも失敗したステータス? – Antonio

+0

どちらのフレームワークも知らないので、私はそれに答えることはできません。 –

+0

残念なことに、私はopencvもboost :: ostreamsも使用していないので、助けてくれません – Valerie

関連する問題