Проблема в том, что std::fstream
по умолчанию не генерирует исключения, а устанавливает биты, которые затем можно проверить. Очевидно, что затем можно создать выбросы (я думаю) с помощью функции исключений, как описано здесь — см., Например, c ++ справочная страница
Но что, если, например, права на запись файла означают, что файл не может быть записан? Это будет означать, что, когда я пытаюсь сделать
ofstream file("file", ios::out);
отказ приведет к. Но как определить, что произошел сбой по той конкретной причине, что у пользователя не было разрешений на запись? Я думаю, что я ищу какой-то механизм, который скажет мне именно это, например. может отображаться «Файл не может быть записан, потому что …». Я не хочу проверять права доступа к файлам, потому что существует множество причин, по которым может произойти сбой записи (сбои жесткого диска / повреждение и т. Д.). Было бы лучше, если бы он просто сказал мне, почему именно это не удалось.
Кто-нибудь знает, существует ли такая система проверки ошибок для iostreams (в частности, ostreams)? (Может в бусте?)
Вы можете попробовать проверить errno
и, возможно, преобразовать его в удобочитаемую форму с strerror
,
Стандарт не гарантирует ничего о применимости errno
к сбоям ввода-вывода, но на практике это должно работать.
Других решений пока нет …