読み込み - visual c++ ファイル名 取得




C++を使用したディレクトリ内のファイル数 (4)

C ++標準ライブラリを使用してディレクトリ内のファイルの総数を取得する方法 任意の助けは大歓迎です。


それらの名前がよくソートされていて、拡張子が同じであれば、標準のC ++ライブラリでそれらを数えることができます。

ファイル名が "img_0.jpg..img_10000.jpg..img_n.jpg"のようになっていると仮定して、それらがフォルダ内にあるかどうかを確認してください。

int Trainer::fileCounter(string dir, string prefix, string extension)
{
    int returnedCount = 0;
    int possibleMax = 5000000; //some number you can expect.

    for (int istarter = 0; istarter < possibleMax; istarter++){
        string fileName = "";
        fileName.append(dir);
        fileName.append(prefix);
        fileName.append(to_string(istarter));
        fileName.append(extension);
        bool status = FileExistenceCheck(fileName);

        returnedCount = istarter;

        if (!status)
            break;
    }

    return returnedCount;
}

bool Trainer::FileExistenceCheck(const std::string& name) {
    struct stat buffer;
    return (stat(name.c_str(), &buffer) == 0);
}


古い質問ですが、Google検索で最初に表示されるので、そのようなことが必要になったので回答を追加することを考えました。

int findNumberOfFilesInDirectory(std::string& path)
{
    int counter = 0;
    WIN32_FIND_DATA ffd;
    HANDLE hFind = INVALID_HANDLE_VALUE;

    // Start iterating over the files in the path directory.
    hFind = ::FindFirstFileA (path.c_str(), &ffd);
    if (hFind != INVALID_HANDLE_VALUE)
    {
        do // Managed to locate and create an handle to that folder.
        { 
            counter++;
        } while (::FindNextFile(hFind, &ffd) == TRUE);
        ::FindClose(hFind);
    } else {
        printf("Failed to find path: %s", path.c_str());
    }

    return counter;
}

基本的に常に利用可能なC標準ライブラリを除外しなければ、それを使うことができます。 ブーストと違って、それはとにかくどこでも利用可能であるので、それはかなり使えるオプションです!

例を示しhere

そしてここ:

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

int main (void)
{
  DIR *dp;
  int i = 0;
  struct dirent *ep;     
  dp = opendir ("./");

  if (dp != NULL)
  {
    while (ep = readdir (dp))
      i++;

    (void) closedir (dp);
  }
  else
    perror ("Couldn't open the directory");

  printf("There's %d files in the current directory.\n", i);

  return 0;
}

そして十分に

 > $ ls -a | wc -l
138
 > $ ./count
There's 138 files in the current directory.

これはまったくC ++ではありませんが、すべてではないにしてもほとんどのオペレーティングシステムで利用可能であり、C ++で動作します。

更新:これがC標準ライブラリの一部であることについての私の前の声明を訂正します - そうではありません。 しかし、この概念を他のオペレーティングシステムにも適用することができます。それらはすべて、追加のライブラリを取得せずにファイルを処理する方法を持っているからです。

編集:: iの初期化を追加





c++