我正在使用以下递归地遍历目录中的所有文件:
try
{
for ( bf::recursive_directory_iterator end, dir("./");
dir != end; ++dir )
{
const bf::path &p = dir->path();
if(bf::is_regular_file(p))
{
std::cout << "File found: " << p.string() << std::endl;
}
}
} catch (const bf::filesystem_error& ex) {
std::cerr << ex.what() << '\n';
}
但这包括隐藏文件和隐藏目录中的文件。
如何过滤掉这些文件?如果需要,我可以将自己限制在隐藏文件和目录以“.”开头的平台上。性格。
最佳答案
不幸的是,似乎没有跨平台的方式来处理“隐藏”。以下适用于类 Unix 平台:
首先定义:
bool isHidden(const bf::path &p)
{
bf::path::string_type name = p.filename();
if(name != ".." &&
name != "." &&
name[0] == '.')
{
return true;
}
return false;
}
然后遍历文件变成:
try
{
for ( bf::recursive_directory_iterator end, dir("./");
dir != end; ++dir)
{
const bf::path &p = dir->path();
//Hidden directory, don't recurse into it
if(bf::is_directory(p) && isHidden(p))
{
dir.no_push();
continue;
}
if(bf::is_regular_file(p) && !isHidden(p))
{
std::cout << "File found: " << p.string() << std::endl;
}
}
} catch (const bf::filesystem_error& ex) {
std::cerr << ex.what() << '\n';
}
关于c++ - 如何使用 Boost Filesystem 忽略隐藏文件(和隐藏目录中的文件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735634/