2008-11-20 4 views
12

Есть ли способ получить определенное условие ошибки при открытии потока C++? То есть, был ли он неудачным, потому что файл не существовал, или разрешения были неправильными, или т. Д. В основном я ищу функциональность, эквивалентную errno для fopen() в plain C.Можете ли вы получить определенное условие ошибки при открытии потока C++?

GCC, кажется, правильно устанавливает errno , но это не похоже на стандарт C++, и я не могу определить, является ли это просто артефактом того, как они реализовали потоки, или преднамеренной функцией (и, следовательно, я не знаю, будет ли она сохраняться версии).

Есть ли способ получить эту информацию надежно, либо в стандартном C++, либо не случайно в одном или нескольких основных компиляторах?

ответ

0

В Visual Studio fopen и т. Д. Задается значение кода последней ошибки. Его можно получить с помощью GetLastError(). Результат будет одним из значений these.

+0

У вас есть ссылка на то, где это указано в документе VS? Я смотрел на потоковые страницы в MSDN, но я не могу найти упоминания об этом поведении. Я не говорю, что это не сработает, но было бы неплохо увидеть официальный документ. – 2010-03-19 10:19:18

4

Вы можете посмотреть флагов ios (badbit, eofbit, failbit, goodbit) по общим причинам. Тестирование будет проще с помощью ios :: bad(), ios :: fail(), ios :: eof() или ios :: good(). Поток также может быть настроен для генерации исключений при ошибке, используя ios :: exceptions().

Подробные сообщения об ошибках ввода-вывода могут быть доступны в некоторых реализациях, как вы указываете на GCC. Возможно, вам придется полагаться на это поведение для разных компиляторов. Если есть вероятность для нескольких компиляторов, обязательно проверьте и, возможно, включите инструкции препроцессора для проверки текущего компилятора и т. Д.
Насколько я знаю, единственное другое место, о котором идет речь, находится в proposed TR2 additions.

 Смежные вопросы

  • Нет связанных вопросов^_^