14

C ++ストリームのオープンに失敗したときに特定のエラー状態を取得する方法はありますか?つまり、ファイルが存在しなかったために失敗したか、アクセス許可が間違っていたかなどです。基本的に、プレーンCのfopen()のerrnoと同等の機能を探しています。

GCCはerrnoを適切に設定しているようですが、それはC ++標準では必要とされていないようで、これがストリームの実装方法のアーティファクトなのか、それとも意図的な機能なのかを判断できません(したがって、私はそうしません)バージョン間で存続するかどうかを確認してください)。

標準のC++で、または1つ以上の主要なコンパイラで偶然ではなく、この情報を確実に取得する方法はありますか?

4

2 に答える 2

4

一般的な理由から、ios フラグ (badbit、eofbit、failbit、goodbit) を調べることができます。ios::bad()、ios::fail()、ios::eof()、または ios::good() を使用すると、テストが簡単になります。ストリームは、ios::exceptions() を使用して、エラー時に例外を生成するように設定することもできます。

GCCについて指摘しているように、詳細なI / Oエラーレポートは一部の実装で利用できる場合があります。異なるコンパイラでは、この動作に依存する必要がある場合があります。複数のコンパイラの可能性がある場合は、必ずテストし、現在のコンパイラなどを確認するためのプリプロセッサ ステートメントを含めるようにし
ください

于 2008-11-20T03:37:05.967 に答える
0

Visual Studio fopenなどで、last-errorコード値を設定します。GetLastError()で取得できます。結果はこれらの値の1つになります。

于 2008-11-20T01:37:27.800 に答える