[filesystem][cvs] a problem with recursive_directory_iterator

I was not sure if this question should go to boost.user or boost.devel, since I am testing cvs code, so I post here... Below is a test program which count the files in sub-folders of a given folder, if a folder has an empty folder, calling the recursive_directory_iterator's status() will cause a assertion failure: "attempt to dereference end iterator". Did i missing something? Best Regards gchen // begin test code=================== #include <iostream> #include <boost\filesystem.hpp> namespace fs = boost::filesystem; // get file count in a folder size_t file_count(const fs::path &p) { size_t numFile = 0; for (fs::recursive_directory_iterator iter(p); iter != fs::recursive_directory_iterator(); ++iter) { if (fs::is_regular(iter->status())) numFile++; } return numFile; } int main(int argc, char *argv[]) { // "c:\tmp" has an empty folder "c:\tmp\empty" fs::path p("c:\\tmp"); // this is OK, if test the empty folder directly file_count("c:\\tmp\\empty"); for (fs::directory_iterator iter(p); iter != fs::directory_iterator(); ++iter) { if (fs::is_directory(iter->status())) { // file_count will cause ssertion fail when // encount the empty folder "c:\tmp\empty" size_t size = file_count(iter->path()); std::cout << "folder: " << iter->path().leaf() << "has: " << size << " file(s)\n"; } } return 0; } // end test code===================

A follow-up: It looks like recursive_directory_iterator doesn't work with any empty folder, this code also cause an assertion failure. I think the equal(...) function of recursive_directory_iterator should do more check. int main(int argc, char *argv[]) { fs::path p("c:\\empty_folder"); // a empty folder fs::recursive_directory_iterator iter(p); if (iter != fs::recursive_directory_iterator()) iter->status(); // <== cause a assertion failure return 0; }
participants (1)
-
gchen