Есть ли способ проверить, был ли istream открыт в двоичном режиме? - PullRequest
19 голосов
/ 22 октября 2008

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

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

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

Ответы [ 2 ]

14 голосов
/ 22 октября 2008

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

6 голосов
/ 22 октября 2008

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

...