Puede hacer que una transmisión en particular arroje una excepción en cualquiera de eof/fail/bad llamando a su función ios::exceptions() con la máscara de bits adecuada. Por lo tanto, se podría reescribir el ejemplo de la pregunta inicial anterior como:
std::ifstream stream;
stream.exceptions(std::ios::failbit | std::ios::badbit);
stream.open(filename.c_str());
Aquí corriente arrojará una excepción cuando el failbit o badbit consigue el sistema. Por ejemplo, si ifstream::open() falla, establecerá el failbit y lanzará una excepción. Por supuesto, esto arrojará una excepción más adelante si cualquiera de estos bits se establece en la secuencia, por lo que esta reescritura no es exactamente la misma que en el ejemplo inicial. Puede llamar al
stream.exceptions(std::ios::goodbit);
para cancelar todas las excepciones en la transmisión y volver a buscar errores.
no se olvide de comprobar 'stream.bad()', 'stream.good()', 'stream.fail()', y 'stream.is_open()'. suspiro ... – Inverse
muchas gracias por el enlace! Estoy de acuerdo en que no es bueno hacer el control con este operador, así que lo cambiaré. No hubiéramos tenido la discusión con if (stream.fail()). – Philipp
¡El! está sobrecargado para verificar 'fallar' y 'malo' –