有没有办法检查是否以二进制模式打开了一个istream?

时间:2008-10-22 02:11:47

标签: c++ standard-library iostream

我正在使用istream,它可以是stringstream,ifstream或用户定义的流类型,我需要知道,如果是ifstream,它是不是以二进制模式打开(所以我可以抛出异常)。我尝试了以下方法:

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

但是没有例外。在这种情况下测试失败,因为_is.flags()返回0x201而ios :: binary是0x20。有没有办法找出是否在文本模式下打开了流?

2 个答案:

答案 0 :(得分:13)

flags()返回ios_base::fmtflags,它是格式化标志,而binary是ios_base::openmode标志。一旦流已经打开,我不确定是否有办法找到这些。我在想,也许有一个streambuf类的虚拟成员可以提供帮助,但似乎并没有。

答案 1 :(得分:6)

不,没有办法测试这个。