我有一个目录路径,我想遍历它的所有子目录,顺便收集文件的路径。使用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