[C++] 73 ディレクトリ内ファイルリストの作成 C++17

[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;
}

参考サイト