C/C++ filesystem ディレクトリから指定拡張子をvectorに詰める
移転しました。
リダイレクトします。
pythonのglob関数をC/C++で使いたい.
それができるといわれる"glob.h"なるものがあるらしい.しかし,それはLinuxのライブラリらしくWindowsでは使えそうになかった.(私の知識不足感は否めない)そこで,filesystemと呼ばれるライブラリでも同じようにglob的なことができるようだ.
本記事では,ディレクトリからpngファイルを取得し,vectorに詰めるコードを記す.
#include <iostream> #include <string> #include <vector> #include <filesystem> int main() { std::string dir_name = "C:/Users/MEK/test"; std::vector<std::string> files; std::filesystem::path dir_path(dir_name); //例外処理 if (!std::filesystem::is_directory(dir_path)) { std::cout << "No Dir" << std::endl; return -1; } //pngファイルをvectorに詰める auto dir = std::filesystem::directory_iterator(dir_path); for (auto& p : dir) { std::string pathname = p.path().string(); if (pathname.find(".png") != std::string::npos) { std::cout << p.path().string() << std::endl; files.push_back(pathname); std::cout << std::endl; } } }
注意事項
VisualStudio2019では,プロジェクトプロパティの全般からC++標準をC++17にする必要がある.