[M1 Mac, Big Sur 11.6.7, clang 13.0.0]
前回はワイルドカードを使ってファイルのリストを作成しましたが、全てのファイルをリスト化する場合はdirectory_iteratorクラスなどを使います。この方法はC++17から標準で採用されています。
これについては後発学習組で助かりました。C++14以前の標準ライブラリで関数を作るのは結構手間でしょうから。
ところでBoost C++ ライブラリの現在の立ち位置が気になります。C++11以降、標準ライブラリへの採用が増えていて存在感が薄れているような。プログラミング教育や競技プログラミング界隈(一部を除く)ではまるで存在しないかのように扱われています。これは前からかな。
私自身は可読性、メンテナンス性、コンパイル速度への影響を考慮し、アプリ製作では今のところ使わない方針です。個人的にはsplit関数を早く標準に採用して欲しいところです。
#include <filesystem>
#include <string>
#include <vector>
vector<string> get_file_path(string dir) {
vector<string> files;
for (const std::filesystem::directory_entry& dir_entry : std::filesystem::directory_iterator(dir)) {
if (!dir_entry.is_directory()){
files.emplace_back(dir_entry.path().string());
}
}
return files;
}
// サブディレクトリ内も再帰的に検索する場合
vector<string> get_file_path2(string dir) {
vector<string> files;
for (const std::filesystem::directory_entry& dir_entry : std::filesystem::recursive_directory_iterator(dir)) {
if (!dir_entry.is_directory()){
files.emplace_back(dir_entry.path().string());
}
}
return files;
}