2011-08-16 6 views
7

私のコードでは、iostreamへの参照が渡されています。この場合、最終的にファイルになります。
開かれたときに、[in]だけでなく[in | out]に設定されているかどうかを調べる方法はありますか?iostreamに書き込めるかどうか尋ねることはできますか?

+0

実際には「iostream」ですか?もしそうなら、それは 'istream'と' ostream'の両方を継承し、したがって書き込み可能です。ベースクラスの 'ios'を参照している場合は、RTTIまたはテンプレート関数のどちらかを使用しています。 –

+3

std :: fstream f( "/ work/file.txt"、std :: ios_base :: in); -fはostreamを継承しますが、書き込みはできません。 –

+0

しかし、ファイルに書き込むことができるかどうかを知りたい人を悩ませることを除いて、なぜあなたはそれをしますか? – UncleBens

答えて

3

の種類、ostreamに、私が使用openmodeフラグを取得する方法を見ていません。私はあなたの参照に何かを書いて、それがスローするエラーをキャッチしようとする必要がありますね。または、設定方法によっては、bad()の結果を確認してください。

-2

... IOS、入出力ストリームのすべてのメンバーを見た後

if (dynamic_cast<ostream*>(MyStreamPtr) == 0) 
{ 
    // Not for output... 
} 
1

openmodestd::streambufに引き渡されますが、取得する方法はありません。書き込み操作のためにファイルが開いているかどうかを知る唯一の方法は、f.fail()、または場合によってはf.bad()f.rdstate() & std::fstream::badbitに相当)の書き込みとチェックを試みることです。

関連する問題