2012-11-15 49 views
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目錄迭代器構造函數中的異常

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。請注意,轉移到新的升級版本時是不可能的。

回答

0

把你的boost代碼放在try和catch語句中。

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

從堆棧跟蹤中可以看到,它不是C++異常,而是斷言失敗 – cpl