2011-08-16 46 views
7

在我的代碼中,我傳遞了一個對iostream的引用,在這種情況下最終是一個文件。
有沒有什麼方法可以確定它是否在打開時被設置爲[in | out]而不僅僅是[in]?我可以問一個iostream是否可寫嗎?

+0

它實際上是一個'iostream&'?如果是這樣,它從'istream'和'ostream'繼承,因此是可寫的。如果您正在引用基類「ios」,那麼您正在使用RTTI或模板化函數來查看。 –

+3

std :: fstream f(「/ work/file.txt」,std :: ios_base :: in); - f繼承了ostream,但不可寫。 –

+0

但是,爲什麼要這樣做,除了惹惱那些想知道他們是否可以寫入文件的人呢? – UncleBens

回答

3

看着IOS,的iostream,ostream的所有成員後,我沒有看到任何方式獲取所用的openmode標誌。我想你必須嘗試寫一些東西給你的參考,並捕捉它引發的任何錯誤。或者根據它的設置,檢查bad()的結果。

-2

...種

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

openmode傳遞到std::streambuf,但沒有方法來檢索它。要知道該文件是否爲寫入操作打開,唯一的方法是嘗試寫入並檢查f.fail()或可選的f.bad()(相當於f.rdstate() & std::fstream::badbit)。

相關問題