Tôi đang sử dụng trình lặp tăng cường "recursive_directory_iterator" để đệ quy quét qua thư mục. Tuy nhiên, khi trình vòng lặp chạy vào một thư mục mà ứng dụng của tôi không có quyền truy cập, ngoại lệ loại "boost :: filesystem3 :: filesystem_error" được ném, điều này làm dừng trình lặp và hủy bỏ chương trình. Có anyway tôi có thể hướng dẫn các iterator để bỏ qua các thư mục như vậy.recursive_directory_iterator ném ngoại lệ
Tôi đã thử mã được đề xuất tại Traversing a directory with boost::filesystem without throwing exceptions Tuy nhiên, nó cũng không hoạt động đối với tôi. Tôi đang sử dụng phiên bản boost 1.49.
Mã của tôi sau khi làm theo gợi ý (tốt nhất mà tôi có thể đưa ra), trông giống như sau:
void scand()
{
boost::system::error_code ec, no_err;
// Read dir contents recurs
for (recursive_directory_iterator end, _path("/tmp", ec);
_path != end; _path.increment(ec)) {
if (ec != no_err) {
_path.pop();
continue;
}
cout << _path->path() << endl;
}
}
Cảm ơn bạn, Ahmed.
Tôi cập nhật phần gia tăng của vòng lặp for, và bây giờ tôi nhận được một lỗi khác: ***** Lỗi chương trình nội bộ - xác nhận (m_level> 0) không thành công trong void void :: filesystem3 :: detail :: recur_dir_itr_imp :: pop(): /usr/include/boost/filesystem/v3/operations.hpp(818): pop() trên recursive_directory_iterato r với mức <1 Hủy bỏ –
Rõ ràng đây là một cái đã biết (chưa được sửa) lỗi: https://svn.boost.org/trac/boost/ticket/4494 –
Tôi gặp vấn đề tương tự. Vẫn không cố định vào tháng 4 năm 2015? –