自分のブログ名

物理の空き地 by M.E_K

日々の学び、感じたことを書いております。ブログ移行中->https://physics-mek.com

移転しました。

リダイレクトします。

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にする必要がある.