簡體   English   中英

Boost目錄迭代器“沒有這樣的文件或目錄”

[英]Boost directory iterator “no such file or directory”

我使用boost :: filesystem :: directory_iterator迭代文件夾的內容(非遞歸)並計算文件夾中有多少元素。 我能夠迭代整個文件夾,但是當boost :: filesystem :: directory_iterator前進到結束迭代器時會拋出一個錯誤:

libc++abi.dylib: terminating with uncaught exception of type boost::filesystem::filesystem_error: boost::filesystem::directory_iterator::construct: No such file or directory

我沒有看到我在這段代碼中錯誤地使用目錄迭代器,這是拋出錯誤的代碼:

boost::filesystem::path pcdFileDir(getPCDFilePath().string().substr(0, getPCDFilePath().string().find_last_of(boost::filesystem::path::preferred_separator)));
      std::cout << "pcdFileDirectory: " << pcdFileDir.string() << std::endl;
      size_t file_count = 0;
      for(boost::filesystem::directory_iterator itr(pcdFileDir); itr != boost::filesystem::directory_iterator(); ++itr){
        std::cout << itr->path() << std::endl;
        file_count++;
      }
      return file_count;
    }

pcdDir的值為../out/autzen。 在../out/autzen中有54個文件夾,其中包含模式autzen_1,autzen_2等和autzen.pcd之后的pcd文件。 for循環中print語句的輸出如下:

"../out/autzen/autzen.pcd"
"../out/autzen/autzen_1"
"../out/autzen/autzen_10"
"../out/autzen/autzen_11"
"../out/autzen/autzen_12"
"../out/autzen/autzen_13"
"../out/autzen/autzen_14"
"../out/autzen/autzen_15"
"../out/autzen/autzen_16"
"../out/autzen/autzen_17"
"../out/autzen/autzen_18"
"../out/autzen/autzen_19"
"../out/autzen/autzen_2"
"../out/autzen/autzen_20"
"../out/autzen/autzen_21"
"../out/autzen/autzen_22"
"../out/autzen/autzen_23"
"../out/autzen/autzen_24"
"../out/autzen/autzen_25"
"../out/autzen/autzen_26"
"../out/autzen/autzen_27"
"../out/autzen/autzen_28"
"../out/autzen/autzen_29"
"../out/autzen/autzen_3"
"../out/autzen/autzen_30"
"../out/autzen/autzen_31"
"../out/autzen/autzen_32"
"../out/autzen/autzen_33"
"../out/autzen/autzen_34"
"../out/autzen/autzen_35"
"../out/autzen/autzen_36"
"../out/autzen/autzen_37"
"../out/autzen/autzen_38"
"../out/autzen/autzen_39"
"../out/autzen/autzen_4"
"../out/autzen/autzen_40"
"../out/autzen/autzen_41"
"../out/autzen/autzen_42"
"../out/autzen/autzen_43"
"../out/autzen/autzen_44"
"../out/autzen/autzen_45"
"../out/autzen/autzen_46"
"../out/autzen/autzen_47"
"../out/autzen/autzen_48"
"../out/autzen/autzen_49"
"../out/autzen/autzen_5"
"../out/autzen/autzen_50"
"../out/autzen/autzen_51"
"../out/autzen/autzen_52"
"../out/autzen/autzen_53"
"../out/autzen/autzen_54"
"../out/autzen/autzen_6"
"../out/autzen/autzen_7"
"../out/autzen/autzen_8"
"../out/autzen/autzen_9"

如您所見,它正確覆蓋了文件夾中的每個元素。

編輯:使用@Chris_Stathis建議的基於范圍的for循環,具有確切的語法:

  for(auto &file : boost::filesystem::directory_iterator(pcdFileDir)){
    std::cout << file.path() << std::endl;
    file_count++;
  }

不解決錯誤。

我遇到了同樣的問題,起初提升時拋出與你相同的錯誤然后開始拋出std :: bad_alloc。 我分兩步解決了這個問題。

  1. 我使用與編譯項目相同的GCC版本構建了boost庫。 由於我在目標機器上有不同版本的GCC(4.4.7和6.3.0),我想可能會出現一些問題。
  2. 我刪除了所有cmake臨時文件夾和文件,並從頭開始重建我的項目。 如果您使用cmake,請嘗試此操作。 別忘了“干凈”。

我懷疑解決問題的關鍵是第2步。

對我來說這個問題是因為我編譯了 - D_GLIBCXX_USE_CXX11_ABI=0

CXXFLAGS刪除它解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM