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) で明示的にチェックする必要があります。

フォルダーとそのサブフォルダー内のファイルの数が必要な場合は、ディレクトリ内を再帰 (「ウォーク」) する必要があります。また、プラットフォームによっては、シンボリック リンクを確認する必要があります。

于 2012-08-22T14:58:42.230 に答える