2008-10-22 141 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

不,没有办法测试这个。

相关问题