可能重复:
count number of files with a given extension in a directory - C++?
如何使用c或c ++函数获取特定文件夹中的文件数?是否有任何c库函数可以获取给定目录中的文件数量?
答案 0 :(得分:4)
这是一个使用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);
}
答案 1 :(得分:3)
我认为没有任何标准方法可以列出目录中的文件。我记得以前我必须这样做时,我最终使用了Boost Filesystem。
答案 2 :(得分:3)
使用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));
}
答案 3 :(得分:0)
您需要使用opendir()
打开目录,并使用readdir()
遍历整个目录...并计算您执行的次数。
记住'。'和'..'是特殊条目,不计算在内。
如果您只需要计算文件而没有目录,则必须在dir结构中显式检查(man stat
)。
如果您需要在文件夹及其子文件夹中拥有文件数,那么您必须在目录中递归(“walk”) - 并且可能,根据平台,检查对于符号链接。