Определение точной причины не открытия файла

Проблема в том, что std::fstream по умолчанию не генерирует исключения, а устанавливает биты, которые затем можно проверить. Очевидно, что затем можно создать выбросы (я думаю) с помощью функции исключений, как описано здесь — см., Например, c ++ справочная страница

Но что, если, например, права на запись файла означают, что файл не может быть записан? Это будет означать, что, когда я пытаюсь сделать

 ofstream file("file", ios::out);

отказ приведет к. Но как определить, что произошел сбой по той конкретной причине, что у пользователя не было разрешений на запись? Я думаю, что я ищу какой-то механизм, который скажет мне именно это, например. может отображаться «Файл не может быть записан, потому что …». Я не хочу проверять права доступа к файлам, потому что существует множество причин, по которым может произойти сбой записи (сбои жесткого диска / повреждение и т. Д.). Было бы лучше, если бы он просто сказал мне, почему именно это не удалось.

Кто-нибудь знает, существует ли такая система проверки ошибок для iostreams (в частности, ostreams)? (Может в бусте?)

0

Решение

Вы можете попробовать проверить errno и, возможно, преобразовать его в удобочитаемую форму с strerror,

Стандарт не гарантирует ничего о применимости errno к сбоям ввода-вывода, но на практике это должно работать.

2

Другие решения

Других решений пока нет …