ストリームがエラー状態、というのはよくあることです。エラーが発生すると、エラーの一般カテゴリによる状態にフラグが設定されます。表 8 に、フラグとそのエラーカテゴリを示します。
入出力状態フラグ | エラーカテゴリ |
---|---|
ios_base::goodbit |
すべて問題なし。 |
ios_base::eofbit |
入力シーケンスの最後まで入力演算が行われました。 |
ios_base::failbit |
目的の文字を入力演算で読み取ることができませんでした。または目的の文字を出力演算で生成することができませんでした。 |
ios_base::badbit |
基本入力シーケンスや出力シーケンスの完全性が失われたことを表します。 |
フラグ ios_base::goodbit は実際にはフラグではなく、エラーフラグがないことを示すゼロの値です。ストリームにエラーがないことを表します。規約上では、ストリーム状態がゼロ以外になると、すべての入出力演算が無効になります。
場合によっては、eofbit と failbit の両方が設定されることがあります。ただし、この 2 つの意味は異なり、必ずしも同時に発生するわけではありません。入力シーケンスを過ぎても読み取りを行おうとすると、フラグ ios_base::eofbit が設定されます。次の 2 つの例は、その典型的な発生例です。
読み取りや書き込み演算が失敗すると、フラグ ios_base::failbit が設定されます。たとえば、空白だけを含む入力シーケンスから整数を抽出しようとすると、整数の抽出は失敗し、failbit が設定されます。先の例で failbit が設定されるかどうかを確認してみます。
以上の入出力演算以外に、エラーになる状況があります。たとえば、対応するファイルを開くことができな場合は、ファイルストリームによって failbit が設定されます ( 9.2.2 節参照)。
フラグ ios_base::badbit は、基本ストリームバッファの問題を表します。次のような問題が考えられます。
一般に、badbit は、回復不可能なエラー状態を示しますが、failbit が示す状況では失敗した演算をやり直すことができる可能性があります。フラグ eofbit は単純に入力シーケンスの最後を示すだけです。
ストリームエラーの検出には、次の 2 通りの方法があります。
以上の詳細については、次の 2 つの節で説明します。
Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。
OEM リリース, 1998 年 6 月