본문 바로가기

C++

폴더에서 파일 경로 불러오기

728x90

폴더 경로가 std::string으로 주어질 때,

해당 폴더 내에 있는 파일들의 전체 경로를 불러오는 코드를 작성합니다.

 

1. 개발 환경 설정

프로젝트 속성 > General > C++ Language Standard를 C++17로 설정합니다.

C++17에서 boost의 filesystem이 포함되었습니다.

C++14이하 표준을 사용하신다면 filesystem사용을 위해서 boost 라이브러리를 Visual studio에 맞게 빌드하신 다음

링크하여 사용하셔야 합니다.

 

2. 코드 작성

#include <string>
#include <vector>
#include <filesystem>

void readImage(std::string directory, std::vector<std::string>& imageList)
{
	std::filesystem::path someDir(directory);
	std::filesystem::directory_iterator end_iter;
	std::vector<std::string> vc;

	for (std::filesystem::directory_iterator dir_iter(someDir); dir_iter != end_iter; ++dir_iter)
	{
		if (std::filesystem::is_regular_file(dir_iter->status()))
		{
			//printf("%s\n", dir_iter->path().filename() );
			if ((dir_iter->path().filename().generic_string().substr(dir_iter->path().filename().generic_string().length() - 3, 3) != "jpg")
				&& (dir_iter->path().filename().generic_string().substr(dir_iter->path().filename().generic_string().length() - 3, 3) != "png")
				&& (dir_iter->path().filename().generic_string().substr(dir_iter->path().filename().generic_string().length() - 3, 3) != "bmp"))
				continue;
			//printf("%s\n", dir_iter->path().filename().generic_string().c_str());
			imageList.push_back(dir_iter->path().filename().generic_string());
		}
	}
	return;
}

int main()
{
	std::string directory = "C:/data/voc-train2017";
	std::vector<std::string> imageList;

	readImage(directory, imageList);

	for (int i = 0; i < imageList.size(); i++)
	{
		printf("%s\n", (directory + "/" + imageList[i]).c_str());
	}

	getchar();
}

readImage() 함수는 폴더 경로를 std::string으로 받고, 파일들의 전체 경로들을 string vector 타입으로 저장합니다.

readImage() 함수 내에서 조건문의 확장자 문자열을 변경하면 원하는 확장자를 가진 파일들의 경로를 저장하실 수 있습니다. (예시에서는 이미지 파일들(jpg, png, bmp)을 불러옴)

readImage() 함수에서 수정된 vector 변수에 반복문을 사용하면 불러온 파일들의 전체 경로를 사용할 수 있습니다.

 

3. 실행 결과

 

'C++' 카테고리의 다른 글

텍스트 파일 통째로 std::string에 넣기  (0) 2022.03.22
C++의 기초(Hello, World)  (0) 2022.03.12
Visual Studio 2022 + OpenCV4.5.4(prebuilt)  (1) 2021.11.14
용어(Effective C++)  (0) 2021.11.04
C++11 실행 시간 체크(Chrono library)  (0) 2021.09.14