특정 폴더에 아주 많은 디렉토리가 있고, 각 디렉토리의 파일에 접근해야 할 경우 우선 디렉토리의 목록을 모두 가져와야겠죠.

예시로 첨부한 그림처럼 규칙이 어느 정도 보이면 문자열로 처리하면 될텐데, 그렇지 않을 경우 참 곤란합니다.

옛날에 디렉토리 목록을 나열할 방법이 없지는 않을테지만, 라이브러리를 이용하지 않는 이상 코드 라인이 길어지거나 C++ 표준이 아니겠지요.

 

C++17에서는 아주 쉽게 디렉토리 목록을 나열할 클래스를 제공합니다.

filesystem namespace의 directory_iterator 클래스인데요, 역시나 boost 라이브러리에서 넘어왔죠.

 

Visual Studio 2015에서는 해당 클래스를 실험적으로 제공하고 있습니다. C++17 표준이 확정되기 이전이라 그랬겠지요.

따라서 filesystem namespace 앞에 experimental namespace를 붙여야 합니다... ^^;

 

filesystem 헤더 파일을 포함하고 std::experimental::filesystem::directory_iterator 클래스를 사용하시면 되겠습니다.

 

 

예제코드:

1
2
3
4
5
6
7
8
std::string dir = "D:/test/";
std::vector<std::string> paths;
 
forauto& p : std::experimental::filesystem::directory_iterator(dir) )
{
    paths.push_back(p.path().string());
}
 
cs

 

 

참고자료:

[1] http://en.cppreference.com/w/cpp/experimental/fs/directory_iterator 

[2] https://stackoverflow.com/questions/612097/how-can-i-get-the-list-of-files-in-a-directory-using-c-or-c 

 

'코딩 > C++' 카테고리의 다른 글

C++ 스레드 동기화 그리고 std::condition_variable  (0) 2023.12.04

+ Recent posts