如何使用标准计算目录中的文件数?

新手上路,请多包涵

预计 2017 年的新标准增加了 std::filesystem 。使用它,我如何计算一个目录中的文件(包括子目录)的数量?

我知道我们可以做到:

 std::size_t number_of_files_in_directory(std::filesystem::path path)
{
    std::size_t number_of_files = 0u;
    for (auto const & file : std::filesystem::directory_iterator(path))
    {
        ++number_of_files;
    }
    return number_of_files;
}

但这似乎有点矫枉过正。是否存在更简单、更快捷的方法?

原文由 Boiethios 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 924
2 个回答

我认为不存在轻松获取目录中文件数量的方法,但您可以使用 std::distance 而不是手写循环来简化代码:

 std::size_t number_of_files_in_directory(std::filesystem::path path)
{
    using std::filesystem::directory_iterator;
    return std::distance(directory_iterator(path), directory_iterator{});
}

您可以使用 count_if 来获取仅实际文件的数量或应用任何其他过滤器:

 std::size_t number_of_files_in_directory(std::filesystem::path path)
{
    using std::filesystem::directory_iterator;
    using fp = bool (*)( const std::filesystem::path&);
    return std::count_if(directory_iterator(path), directory_iterator{}, (fp)std::filesystem::is_regular_file);
}

原文由 Revolver_Ocelot 发布,翻译遵循 CC BY-SA 3.0 许可协议

std::size_t number_of_files_in_directory(std::filesystem::path path)
{
    return (std::size_t)std::distance(std::filesystem::directory_iterator{path}, std::filesystem::directory_iterator{});
}

没有函数可以找出目录中有多少文件,只有迭代它的函数。操作系统仅具有 readdir()ftw()FindFirstFileW() 等功能,因此该标准无法提供更好的方法。

(有利的一面是,您可以决定是否递归到子目录或递归到子目录的深度)

原文由 user45891 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题