Tengo la siguiente situación.excepciones de archivo de serialización de impulso de captura
Este es un fragmento de código, editado para demostrar el problema.
ifstream ifs("empty_file");
if(!ifs.is_open()) {
ui.display("Error: Unable to open file \"empty_file\"\n");
return;
}
archive::text_iarchive ia(ifs);
try {
ia >> some_class;
} catch (...) {
ui.display("This should catch ever single exception\n");
}
empty_file es, de hecho, un archivo completamente vacío. Esto debería causar un error; y lo hace El problema es que no puedo capturar la excepción lanzada por impulso y abusar del usuario sobre darme un archivo vacío/dañado para cargar.
En su lugar, me sale el siguiente:
Loading...
terminate called after throwing an instance of 'boost::archive::archive_exception'
what(): invalid signature
Aborted
Por lo que yo sé, la captura (...) debe capturar cada excepción en existencia. ¿Estoy haciendo algo mal, o la serialización boost :: simplemente atrapa su propia excepción y aborta antes de que tenga la oportunidad de hacer algo?
Si este último es el caso, entonces ¿soy yo o es realmente un mal diseño? Su programa completo no debería fallar (abortar) simplemente desde un archivo de carga dañado. ¿Y qué puedo hacer al respecto?
Ejem. Solo fingiré que no soy tan estúpido ... * silbidos despreocupadamente *. Además, lo siento; pero no puedo marcar su respuesta como aceptada por otros tres minutos. EDITAR: Y sí, esa es la primera afirmación de catch que tengo, pero, como dije en la pregunta, el código fue macheteado para no ser inflado pero aún demostrar mi problema (idiotez). – Infiltrator
@Tim: Y solo pretenderé que nunca he cometido errores similares. v) –