2008-10-22 139 views
17

我正在使用一個istream,可能是stringstream,ifstream或用戶定義的流類型,我需要知道,如果ifstream,它不是以二進制模式打開(所以我可以拋出異常) 。我試過以下方法:有沒有辦法檢查istream是否以二進制模式打開?

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

但是沒有例外拋出。在這種情況下,測試失敗,因爲_is.flags()返回0x201,而ios :: binary是0x20。有沒有辦法找出流是否在文本模式下打開?

回答

11

flags()返回ios_base::fmtflags這是格式化標誌,而二進制是ios_base::openmode標誌。我不確定在流已經打開時是否有辦法找到這些。我在想,也許有一個streambuf類的虛擬成員可以提供幫助,但實際上並不是這樣。

+0

我很害怕這種情況。 – Ferruccio 2008-10-22 02:38:29

4

不,沒有辦法測試這個。

相關問題