22

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

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

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

4

2 回答 2

17

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

于 2008-10-22T02:23:22.743 回答
7

不,没有办法对此进行测试。

于 2008-10-22T02:22:31.623 回答