1

ブースト ファイルシステム イテレータを使用していますが、特定のフォルダを解析しようとすると問題が発生します。このフォルダーは、curòlftpfs をルートとして使用してマウントされたリモート ftp フォルダーです。同じフォルダを nfs 共有としてもマウントできます。アプリケーションを nfs 共有で実行すると、反復は正常に機能しますが、ftp 共有で実行すると例外が発生します。クラッシュの原因となる特定のフォルダーは、lost+found フォルダーです。root ユーザーはそれにアクセスできないようですが、nfs 共有で ls /mnt/remoteftp/lost-found を試行すると、アクセス許可が拒否されたというエラーが表示され、ls /mnt/remoteftp/lost+found I get input/ を実行します。出力エラー。curlftpfs に何らかの問題があることは明らかですが、ある種のアクセス許可エラーが返されるはずなので、この場合はブーストがクラッシュすることはありません。私は試した

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

クラッシュを回避するためにできる追加の制御はありますか? フォルダーを無視することは望ましい動作ですが、それを無視できるブーストファイルシステムチェック機能が見つかりません! ブーストバージョン1.49を使用しています。現時点では、新しいブースト バージョンに移行することはできませんのでご注意ください。

4

1 に答える 1

0

ブーストコードを try および catch ステートメントに入れます。

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