我有一个目录的路径,我想遍历它的所有子目录,顺便收集文件的路径。
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;
}
不幸的是,在遍历过程中,我偶然发现了一个我无权查看的目录,上面的代码抛出了异常。但显然,在这种情况下,这不是一个例外,我应该继续,跳过这个锁定的目录。
但我该怎么做呢?
哈,想通了,有一个办法:
std::vector<fs::path> traverse_if_directory(fs::path& f) {
std::vector<fs::path> result;
boost::system::error_code ec;
if (fs::is_directory(f)) {
for (
fs::recursive_directory_iterator it(f, ec), eit;
it != eit;
it.increment(ec)
) {
if (ec) {
it.pop();
continue;
}
if (!fs::is_directory(it->path())) {
result.push_back(it->path());
}
}
}
else {
result.push_back(f);
}
return result;
}
有一个非抛出重载,它接受类型的输出参数boost::system::error_code
,所以我可以在每次增量后检查是否有任何错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)