如何使用标准计数目录中的文件数
How to count the number of files in a directory using standard?
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;
}
但这似乎过于杀伤。是否存在更简单,更快的方式?
我认为不存在轻松获取目录中的文件数量的方法,但是您可以使用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);
}
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{});
}
没有功能可以找出目录中有多少个文件,只能在其上迭代。OS仅具有readdir()
,ftw()
,FindFirstFileW()
之类的函数,因此标准无法提供更好的方法。
(在正面,您可以决定是否或深入到子目录中)
如果您使用的是Visual Studio 17,则需要使用以下名称空间。
namespace fs = std::experimental::filesystem;
然后您可能可以使用这样的函数。
int Count() {
int count=0;
for (auto& p : fs::directory_iterator(dir)) {
count++;
}
return count;
}
相关文章:
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何在其他文件中使用函数
- 在实现文件中使用头文件的通用 lambda
- 将 getline() 与文件一起使用
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 定义C++新的环境变量并在 bat 文件中使用它
- 如何在另一个 CPP 文件中使用一个 cpp 文件中的函数?
- 在 embarcadero / RAD 工作室中的 .dfm 文件中使用常量
- 声明要在 qml 和 cpp 文件中使用的全局字符串
- 如何在 linux 可执行文件中使用静态库
- 在C++的头文件中使用常量并在程序中询问其地址的任何潜在危险
- 使用 libssh 从 SFTP 服务器下载文件并使用 C++ 将其写入 ofstream?
- CocoaPod - 在头文件中使用 C++ 时出现 Podspec 检查错误
- 链接器输入文件未使用,因为链接未完成,我无法获得.o
- 使用个人C++库编译代码时,与头文件一起使用时会中断
- 如何为文件路径使用变量?
- 没有头文件如何使用c ++调用其他模块中的函数?
- 在带有类型保护的模板文件中使用前向声明
- 无法使包含.hpp文件与其中的2个文件一起使用
- 文件删除(使用取消链接)与释放所有磁盘空间之间的延迟