2

可能重复:
计算目录中具有给定扩展名的文件数 - C++?

如何使用 c 或 c++ 函数获取特定文件夹中的文件数?是否有任何 c 库函数可以获取给定目录中的文件数?

4

4 回答 4

6

这是一个使用 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);
}
于 2012-08-22T15:18:11.923 回答
3

我认为没有任何标准方法可以列出目录中的文件。我记得以前必须这样做时,我最终使用了 Boost Filesystem。

于 2012-08-22T14:56:05.240 回答
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));
}
于 2012-08-22T15:34:27.900 回答
0

您需要使用 打开目录opendir(),并使用 ... 循环浏览整个目录readdir(),并计算您执行了多少次。

记住那个'。和 '..' 是特殊条目,不算数。

如果您只需要计算文件而不计算目录,则必须在 dir 结构 (man stat) 中显式检查。

如果您需要文件夹及其子文件夹中的文件数量,那么您将不得不在目录中递归(“walk”) - 并且可能取决于平台,检查符号链接。

于 2012-08-22T14:58:42.230 回答