Вопрос по standard-library, c++, iostream – Есть ли способ проверить, был ли istream открыт в двоичном режиме?

18

Я использую istream, который может быть строковым потоком, ifstream или пользовательским типом потока, и мне нужно знать, не был ли он в случае ifstream открыт в двоичном режиме (поэтому я могу выдать исключение). Я попробовал следующий метод:

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

но не исключение никогда не выбрасывается. В этом случае тест не пройден, потому что _is.flags () возвращает 0x201, а ios :: binary - 0x20. Есть ли способ узнать, был ли поток открыт в текстовом режиме?

Ваш Ответ

2   ответа
6

Нет, нет способа проверить это.

13

flags () возвращаетios_base :: fmtflags который форматирует флаги, тогда как бинарныйios_base :: OpenMode флаг. Я не уверен, есть ли способ узнать это, когда поток уже открыт. Я думал, что, возможно, существует виртуальный член класса streambuf, который мог бы помочь, но на самом деле это не так.

Я боялся, что это так. Ferruccio

Похожие вопросы