c++ - 如何使用 Boost Filesystem 忽略隐藏文件(和隐藏目录中的文件)?

标签 c++ boost boost-filesystem hidden-files

我正在使用以下递归地遍历目录中的所有文件:

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/

相关文章:

c++ - 使用 boost::algorithms::join 提取和连接字符串

c++ - 使用 boost::filesystem 时出错

c++ - 单元测试 Boost 文件系统 create_directories

c++ - solvePnP 返回错误结果

在抽象类中找不到 C++ 标识符

c++ - 在boost中寻找反序列化示例

c++ - 为什么这种理论上跨平台的代码不会改变 Windows 上的环境变量?

c++ - vector 存储对象

c++ - 如何使用clang修复参数 'args'上缺少的默认参数?

C++/Boost : Synchronize access to a resource across multiple method (getter) calls