我有一個目錄路徑,我想遍歷它的所有子目錄,順便收集文件的路徑。使用boost :: filesystem遍歷目錄而不會拋出異常
namespace fs = boost::filesystem;
std::vector<fs::path> traverse_if_directory(fs::path& f) {
std::vector<fs::path> result;
if (fs::is_directory(f)) {
for (fs::recursive_directory_iterator it(f), eit; it != eit; ++it) {
if (!fs::is_directory(it->path())) {
result.push_back(it->path());
}
}
}
else {
result.push_back(f);
}
return result;
}
不幸的是,在穿越的中間,我偶然發現了一個目錄,我沒有權利來看待,而上面的代碼拋出。但顯然,在這種情況下,它不是一個例外,我應該繼續,跳過這個鎖定的目錄。
但我該怎麼做?
怎麼樣...捕捉異常? – PlasmaHH
當我抓到它時該怎麼辦?此時迭代器已經被銷燬了,我不能從'catch'子句中繼續迭代! –
在遍歷它之前檢查目錄的權限,如果你沒有權限就忽略它[link](http://stackoverflow.com/questions/9776050/how-to-get-file-permissions-with-c-boost-庫) – ldgorman