我正在使用一个 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/