1

我正在使用 boost 文件系统迭代器,当我尝试解析特定文件夹时遇到问题。该文件夹是使用 curòlftpfs 作为根安装的远程 ftp 文件夹。相同的文件夹也可以作为 nfs 共享挂载。如果我在 nfs 共享上运行我的应用程序,迭代工作正常,而如果我在 ftp 共享上运行它,我会得到异常。导致崩溃的特定文件夹是 lost+found 文件夹。似乎 root 用户无权访问它,但是在 nfs 共享中,如果我尝试 ls /mnt/remotenfs/lost-found 我得到一个权限被拒绝错误,执行 ls /mnt/remoteftp/lost+found 我得到输入/输出错误。虽然很明显 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

为了避免崩溃,我可以做任何额外的控制吗?Ingoring 文件夹将是需要的行为,但我找不到任何允许我忽略它的 boost 文件系统检查功能!我正在使用提升版本 1.49。请注意,当时不可能迁移到更新的增强版本。

4

1 回答 1

0

将你的 boost 代码放在 try 和 catch 语句中。

try { //code here}
catch(boost::filesystem::filesystem_error &ex){std::cout << ex.what() << "\n";}
于 2013-01-03T18:26:07.940 回答