我正在使用boost文件系統迭代器,當我嘗試解析特定文件夾時遇到問題。該文件夾是使用curòlftpfs作爲根掛載的遠程ftp文件夾。相同的文件夾也可以掛載爲nfs共享。如果我在nfs共享上運行我的應用程序,則迭代工作正常,而如果我在ftp共享上運行它,則會得到異常。導致崩潰的特定文件夾是lost + found文件夾。似乎root用戶無法訪問它,但在nfs共享中,如果我嘗試ls/mnt/remotenfs/lost-found我得到權限被拒絕的錯誤,執行ls/mnt/remoteftp/lost + found我得到輸入/輸出錯誤。雖然很明顯curlftpfs有一些問題,因爲它應該返回某種權限錯誤,但在這種情況下boost不應該崩潰。我試圖在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版本1.49。請注意,轉移到新的升級版本時是不可能的。
從堆棧跟蹤中可以看到,它不是C++異常,而是斷言失敗 – cpl