LINUX.ORG.RU

Boost и возвращаемые ошибки


0

0

Доброго всем времени суток.

Начал знакомиться с Boost. Подскажите, пожалуйста.

Есть следующий код:
-------------------
boost::filesystem::path path("no_such_directory");

try
{
for(boost::filesystem::directory_iterator file(path); file != boost::filesystem::directory_iterator(); file++)
std::cout << file->path().string() << std::endl;
}
catch(boost::filesystem::filesystem_error e)
{
std::cout << e.what() << std::endl;
}
-------------------

Если директориии "no_such_directory" не существует, то программа выдает мне "boost::filesystem::basic_directory_iterator constructor", а хотелось бы, чтобы выдавала что-нибудь вроде "No such file or directory" (т. е. то, что выдает strerror(errno)).

Как это сделать? Насколько я понимаю, вызывать вручную в обработчике strerror(errno) не правильно, т. к. не понятно, какие системные вызовы производит Boost после возникновения ошибки чтения директории, которые могут изменить интересующее меня значение errno.

anonymous

Такие вопросы лучше задавать на rsdn.ru - тех кто "в теме" там побольше.

syomin
()

Задачка интересная и легкая. Я до сего дня ни разу не использовал boost::filesystem, только читал немного документации. Пришлось пошариться по документации, установить нужные пакеты, поиграться с программкой. Вообщем, я обнаружил, что можно получить код системой ошибки с помощью метода system_error().

-std::cout << e.what() << std::endl; 
+std::cout << strerror(e.system_error()) << std::endl; 

Вот так у меня заработало и стало выдавать "No such file or directory" (boost-filesystem-1.34.1-alt1).

P.S. Ошибки лучше в cerr выводить. Кроме сообщения не забудь добавить что-то вроде "Can' open " и имя каталога, которое пытался открыть.

P.P.S. Я тоже начал с boost знакомиться ;-)

php-coder ★★★★★
()
Ответ на: комментарий от php-coder

php-coder, премного Вам благодарен!

anonymous
()
Ответ на: комментарий от php-coder

> strerror

А насколько это переносимо в венде? Там же свои кошмарные API для получения текстового описания ошибки.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

strerror из стандартной библиотеки C => переносимость должна быть полной, если конечная сишная библиотека реализована по стандарту.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.