c++ - 有没有办法检查 istream 是否以二进制模式打开?

标签 c++ standard-library iostream

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

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

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

最佳答案

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

关于c++ - 有没有办法检查 istream 是否以二进制模式打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224234/

相关文章:

c++ - 下面的c++程序有没有代码优化方法

c++ - 将矩阵 c\c++ API 与基于行的索引一起使用

c++ - 使用参数化构造函数初始化类成员 - 编译器认为我正在声明一个函数?

c++ - 包含 <string> 时 xutility 出错

android - 如何取消组合 Fabric 中的 native 崩溃报告?

c - 如何确定结构的成员是否已设置?

c++: std::endl 和操作符编译错误>>

c++ - 如何使用 std::fpos?

c# - 在一个 Stream 类中拼接多个流

swift - 字典不符合 ExtensibleCollectionType