可能重复:
计算目录中具有给定扩展名的文件数 - C++?
如何使用 c 或 c++ 函数获取特定文件夹中的文件数?是否有任何 c 库函数可以获取给定目录中的文件数?
可能重复:
计算目录中具有给定扩展名的文件数 - C++?
如何使用 c 或 c++ 函数获取特定文件夹中的文件数?是否有任何 c 库函数可以获取给定目录中的文件数?
这是一个使用 opendir/readdir/closedir 的工作示例(这里没有递归):
void listdir(char *dir) {
struct dirent *dp;
DIR *fd;
if ((fd = opendir(dir)) == NULL) {
fprintf(stderr, "listdir: can't open %s\n", dir);
return;
}
while ((dp = readdir(fd)) != NULL) {
if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
continue; /* skip self and parent */
printf("%s/%s\n", dir, dp->d_name);
}
closedir(fd);
}
我认为没有任何标准方法可以列出目录中的文件。我记得以前必须这样做时,我最终使用了 Boost Filesystem。
有了boost::filesystem
它可能看起来像这样:
#include <iostream>
#include <algorithm>
#include <iterator>
#include <boost/filesystem.hpp>
#include <boost/iterator/filter_iterator.hpp>
namespace fs = boost::filesystem;
int main()
{
fs::path p("D:/mingw/include");
fs::directory_iterator dir_first(p), dir_last;
auto pred = [](const fs::directory_entry& p)
{
return fs::is_regular_file(p);
};
std::cout <<
std::distance(boost::make_filter_iterator(pred, dir_first, dir_last),
boost::make_filter_iterator(pred, dir_last, dir_last));
}
您需要使用 打开目录opendir()
,并使用 ... 循环浏览整个目录readdir()
,并计算您执行了多少次。
记住那个'。和 '..' 是特殊条目,不算数。
如果您只需要计算文件而不计算目录,则必须在 dir 结构 (man stat
) 中显式检查。
如果您需要文件夹及其子文件夹中的文件数量,那么您将不得不在目录中递归(“walk”) - 并且可能取决于平台,检查符号链接。