【问题标题】:Is there a way to check if an istream was opened in binary mode?有没有办法检查 istream 是否以二进制模式打开?
【发布时间】:2010-09-18 11:06:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ standard-library iostream


    【解决方案1】:

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

    【讨论】:

    • 我担心是这样的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-15
      • 2017-10-01
      • 1970-01-01
      • 2017-08-11
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      相关资源
      最近更新 更多