[C++] 72 パターン一致パスのリスト生成 glob.h 

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

ファイル検索アプリに新機能を追加しました。

glob.hを使って、Pythonのglob.glob()と同じようにパターン一致パスのリストを作成できるようにしました。このアプリでは*.*でディレクトリ内の全てのファイルパスをリストにします。

vector<string>をconst char*に変換するのに少し手間がかかりました。後々のために関数にしておきたいです。

またFl_Multiline_Outputが右端で折り返してくれないという仕様が発覚しましたが、ALL選択で全てコピーできるためとりあえずこれでOKとします。

#include <glob.h>

stringstream paths;

vector<string> get_file_path(string dir) {
    glob_t globbuf;
    vector<string> files;

    glob((dir + "/*.*").c_str(), 0, NULL, &globbuf);

    for (int i = 0; i < globbuf.gl_pathc; i++) {
        files.push_back(globbuf.gl_pathv[i]);
    }

    globfree(&globbuf);
    return files;
}

vector<string> files = get_file_path(string(dir_char));

for (size_t i = 0; i < files.size(); ++i) {
    if (i == 0){
        paths << "{" ;
        paths << "'" << files[i] << "'";
    } else {
        paths << ", " << "'" << files[i] << "'";
    }
}
paths << "}";
output_line->insert((paths.str()).c_str());

参考サイト