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

Is there a way to check if an istream was opened in binary mode?

本文关键字:二进制 模式 是否 检查 istream 有没有      更新时间:2023-10-16

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

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

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

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

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