2011-08-16 12 views
7

Kodumda bir iostream'e bir başvuru gönderdim, bu durumda sonuçta bir dosya.
Açıldığında, sadece [in] değil [in | out] olarak ayarlanmış olup olmadığını öğrenmenin bir yolu var mı?Yazılabilir ise iostream sorabilir miyim?

+0

Aslında bir "iostream &"? Eğer öyleyse, hem “istream” hem de “ostream” den miras alır ve dolayısıyla yazılabilir. Eğer 'ios' taban sınıfına bir referans alıyorsanız, o zaman ya RTTI ya da templated işlevlerini kullanarak bakıyorsunuz demektir. –

+3

std :: fstream f ("/ iş/dosya.txt", std :: ios_base :: in); - f ostril miras alır, ancak yazılabilir değildir. –

+0

Ama neden dosyaya yazıp yazamayacaklarını öğrenmek isteyen insanları rahatsız etmemek için bunu neden yapardınız? – UncleBens

cevap

3

tür IOS, iostream, ostream tüm üyeleri baktıktan sonra kullandım openmode bayrağını almak için herhangi bir yolu yoktu. Referansınıza bir şeyler yazmayı ve attığı her hatayı yakalamayı denemelisiniz. Veya nasıl ayarlandığına bağlı olarak, kötü() sonucunu kontrol edin.

-2

...

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

openmodestd::streambuf'a aktarıldı, ancak bunları geri almak için herhangi bir yöntem yoktur. Dosyanın yazma işlemleri için açık olup olmadığını bilmenin tek yolu, f.fail() veya isteğe bağlı olarak f.bad() (f.rdstate() & std::fstream::badbit eşdeğerine) yazıp denetlemeye çalışmaktır.