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 |