Никто не мешает вам также проверить errno
/ strerror
(например, в вашем обработчике исключений) для более конкретной причины сбоя.
ОБНОВЛЕНИЕ - относительно переносимости
Кстати, реализация IIRC Visual Studio fstream
вызывает _open
/ _read
/ _write
/ и т. Д. Методы CRT, которые устанавливают errno
. Microsoft не дает никаких гарантий относительно того, что GetLastError
все еще содержит правильное значение после возврата методов CRT. То же самое для реализаций cygwin, mingw и т. Д., Которые устанавливают errno
без претензий или гарантий о GetLastError
.
Итак, я поддерживаю мое утверждение, что все, что вам нужно, может и поэтому хочет сделать, это проверить errno
.
Теперь, учитывая все вышесказанное, если вы все еще хотите усложнить свою жизнь и переобучиться, используя Boost::System
вместо простого вызова strerror
, тогда я думаю, что мое определение и ваше определение элегантности и простоты не совпадают. :)