如何使用C或C ++函数获取特定文件夹中的文件数?

时间:2012-08-22 14:53:25

标签: c++ c dirent.h

  

可能重复:
  count number of files with a given extension in a directory - C++?

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

4 个答案:

答案 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”) - 并且可能,根据平台,检查对于符号链接。