У меня следующая ситуация.
Это фрагмент кода, отредактированный для демонстрации проблемы.
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 действительно является абсолютно пустым файлом.Это должно вызвать ошибку;и это делает.Проблема в том, что я не могу отловить исключение, выдаваемое при повышении и злоупотреблении пользователем в связи с предоставлением мне пустого / поврежденного файла для загрузки.
Вместо этого я получаю следующее:
Loading...
terminate called after throwing an instance of 'boost::archive::archive_exception'
what(): invalid signature
Aborted
Насколько я знаю, catch (...) должен перехватывать каждое существующее исключение.Я делаю что-то не так, или boost :: serialization просто перехватывает свое собственное исключение и прерывает (), прежде чем я получаю возможность что-то сделать?
Если последнее имеет место, то это только я илиэто действительно плохой дизайн?Вся ваша программа не должна зависать (прерываться) только из-за поврежденного загрузочного файла.И что я могу с этим поделать?