2017 年更新 :
C++17 では、ファイル システムのファイルを一覧表示する公式の方法があります:std::filesystem
. Shreevardhan から素晴らしい回答があります 以下にこのソース コードを示します:
#include <string>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
std::string path = "/path/to/directory";
for (const auto & entry : fs::directory_iterator(path))
std::cout << entry.path() << std::endl;
}
古い回答:
ブーストを使用しない小さくて単純なタスクでは、dirent.h を使用します これは Windows でも利用できます:
DIR *dir;
struct dirent *ent;
if ((dir = opendir ("c:\\src\\")) != NULL) {
/* print all the files and directories within directory */
while ((ent = readdir (dir)) != NULL) {
printf ("%s\n", ent->d_name);
}
closedir (dir);
} else {
/* could not open directory */
perror ("");
return EXIT_FAILURE;
}
これは単なる小さなヘッダー ファイルであり、ブーストのような大規模なテンプレート ベースのアプローチを使用せずに、必要な単純な処理のほとんどを実行します (悪気はありません。ブーストが好きです!)。
Windows 互換レイヤーの作成者は Toni Ronkko です。 Unix では、標準ヘッダーです。
C++17 には std::filesystem::directory_iterator
が追加されました として使用できます
#include <string>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
std::string path = "/path/to/directory";
for (const auto & entry : fs::directory_iterator(path))
std::cout << entry.path() << std::endl;
}
また、std::filesystem::recursive_directory_iterator
サブディレクトリも反復できます。
残念ながら、C++ 標準では、この方法でファイルとフォルダーを操作する標準的な方法は定義されていません。
クロス プラットフォームの方法はないため、ブースト ファイルシステム モジュールなどのライブラリを使用するのが最適なクロス プラットフォームの方法です。
クロス プラットフォーム ブースト方式:
上記のブースト ページからのソース。
Unix/Linux ベースのシステムの場合:
opendir / readdir / closedir を使用できます。
上記の man ページからのソース コード。
Windows ベースのシステムの場合:
Win32 API の FindFirstFile / FindNextFile / FindClose 関数を使用できます。
上記の msdn ページからのソース コード。