Исключение в конструкторе итератора директории boost

Я использую итератор файловой системы boost, и у меня возникает проблема, когда я пытаюсь разобрать определенную папку. Папка представляет собой удаленную папку ftp, смонтированную с использованием curòlftpfs в качестве пользователя root. Эту же папку можно смонтировать также как общий ресурс nfs. Если я запускаю свое приложение на общем ресурсе nfs, итерация работает нормально, а если я запускаю его на общем ресурсе ftp, я получаю исключение. Папка, вызывающая сбой, — это папка lost + found. Кажется, что пользователь root не имеет к нему доступа, но в то время, когда я пытаюсь запустить ls / mnt / remotenfs / lost-found, я получаю сообщение об ошибке отказа в доступе, выполняя ls / mnt / remoteftp / lost + found, я получаю input / ошибка вывода. Хотя очевидно, что у curlftpfs есть некоторые проблемы, так как он должен возвращать какую-то ошибку разрешения, в этом случае boost не должен аварийно завершать работу. Я старался

boost::filesystem3::directory_iterator itr(dir_path);

а также

boost::system::error_code ec;
boost::filesystem3::directory_iterator itr(dir_path, ec);

но результат тот же:

#0  0x0000003064a329a5 in raise () from /lib64/libc.so.6
#1  0x0000003064a34185 in abort () from /lib64/libc.so.6
#2  0x0000003064a2b935 in __assert_fail () from /lib64/libc.so.6
#3  0x000000000043a7b5 in boost::shared_ptr<boost::filesystem3::detail::dir_itr_imp>::operator-> (this=0x7fffd216cf30)
at /usr/include/boost/smart_ptr/shared_ptr.hpp:414
#4  0x00000000005e89f2 in boost::filesystem3::detail::directory_iterator_increment (it=..., ec=0x0) at libs/filesystem/v3/src/operations.cpp:1947
#5  0x00000000004363af in boost::filesystem3::directory_iterator::increment (this=0x7fffd216cf30) at /usr/include/boost/filesystem/v3/operations.hpp:630
#6  0x00000000005e8810 in boost::filesystem3::detail::directory_iterator_construct (it=..., p=..., ec=0x7fffd216cf40)
at libs/filesystem/v3/src/operations.cpp:1918
#7  0x000000000054a120 in boost::filesystem3::directory_iterator::directory_iterator (this=0x7fffd216cf30, p=..., ec=...)
at /usr/include/boost/filesystem/v3/operations.hpp:598

Есть ли дополнительный контроль, который я могу сделать, чтобы избежать аварии? Ингоринг папки был бы поведением desider, но я не могу найти никакой функции проверки файловой системы boost, которая позволяет мне ее игнорировать!
Я использую версию Boost 1.49. Обратите внимание, что в то время невозможно перейти на более новую версию Boost.

1

Решение

поместите свой буст-код в операторы try и catch.

try { //code here}
catch(boost::filesystem::filesystem_error &ex){std::cout << ex.what() << "\n";}
0

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

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