2008-10-22 6 views
17

Estoy usando un istream que podría ser stringstream, ifstream o un tipo de flujo definido por el usuario y necesito saber si, en el caso de un ifstream, no se abrió en modo binario (para que pueda lanzar una excepción) . He intentado el siguiente método:¿Hay alguna manera de verificar si se abrió una istream en modo binario?

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

pero nunca se arroja ninguna excepción. La prueba falla en este caso porque _is.flags() devuelve 0x201 y ios :: binary es 0x20. ¿Hay alguna manera de averiguar si se abrió una secuencia en modo texto?

Respuesta

11

flags() devuelve ios_base::fmtflags que está formateando banderas, mientras que el binario es ios_base::openmode. No estoy seguro de si hay alguna forma de descubrir esto una vez que la transmisión ya esté abierta. Estaba pensando que tal vez había un miembro virtual de la clase streambuf que podría ayudar, pero realmente no parece haberlo.

+0

Tenía miedo de que ese fuera el caso. – Ferruccio

4

No, no hay forma de probar esto.

Cuestiones relacionadas