22

文字列ストリーム、ifstream、またはユーザー定義のストリーム型である istream を使用しています。ifstream の場合、バイナリ モードで開かれていないかどうかを知る必要があります (したがって、例外をスローできます)。私は次の方法を試しました:

if ((_is.flags() & ios::binary) == 0)
    throw exception(...)

ただし、例外はスローされません。この場合、_is.flags() が 0x201 を返し、ios::binary が 0x20 であるため、テストは失敗します。ストリームがテキスト モードで開かれたかどうかを確認する方法はありますか?

4

2 に答える 2

17

flags()はフォーマットフラグであるios_base::fmtflagsを返しますが、binary はios_base::openmodeフラグです。ストリームが既に開いている場合、これらを見つける方法があるかどうかはわかりません。streambuf クラスの仮想メンバーが役立つ可能性があるのではないかと考えていましたが、実際にはないようです。

于 2008-10-22T02:23:22.743 に答える
7

いいえ、これをテストする方法はありません。

于 2008-10-22T02:22:31.623 に答える