std::filesystem::directory_iterator
std::filesystem::directory_iterator (디렉터리 순회 반복자)
디렉터리의 directory_entry 요소들을 순회하는 LegacyInputIterator예요. 하위 디렉터리는 방문하지 않아요. C++17부터 있어요.
출처: cppreference
본문
<filesystem> 헤더에 정의돼 있어요.
class directory_iterator;
directory_iterator는 디렉터리의 directory_entry 요소들을 순회하는 LegacyInputIterator예요(단, 하위 디렉터리는 방문하지 않아요). 순회 순서는 명세되지 않지만, 각 디렉터리 항목은 정확히 한 번 방문돼요. 특수 경로 이름 .(dot)와 ..(dot-dot)는 건너뛰어져요.
directory_iterator가 오류를 보고하거나 마지막 디렉터리 항목을 지나치면 기본 생성된 반복자(= 끝 반복자)와 같아져요. 두 끝 반복자는 항상 같고, 끝 반복자를 역참조·증가하는 것은 정의되지 않은 동작이에요. 디렉터리 반복자가 생성된 뒤에 파일·디렉터리가 디렉터리 트리에 삭제·추가되면 그 변경이 반복자를 통해 관찰될지 여부는 명세되지 않아요.
멤버 타입
| 멤버 타입 | 정의 |
|---|---|
value_type |
std::filesystem::directory_entry |
difference_type |
std::ptrdiff_t |
pointer |
const std::filesystem::directory_entry* |
reference |
const std::filesystem::directory_entry& |
iterator_category |
std::input_iterator_tag |
멤버 함수
- (constructor) — 디렉터리 반복자를 생성해요.
- (destructor) — 기본 소멸자.
- operator= — 내용을 할당해요.
- operator, operator->* — 가리키는 항목에 접근해요.
- increment, operator++ — 다음 항목으로 나아가요.
비멤버 함수
- begin, end (C++17) — 범위 기반 for 루프 지원.
또한 LegacyInputIterator 요구사항대로 operator== 와 operator!=가 제공돼요(C++20까지는 !=, C++20부터는 ==).
예제
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
for (const auto& entry : fs::directory_iterator("."))
std::cout << entry.path() << '\n';
}