TreeEnumerator class
설명 | 폴더 트리들의 재귀적 열거. 자세히... |
---|---|
모듈 | InputOutput |
Base classes | - |
Derived classes | - |
헤더 | TreeEnumerator.hpp |
Public 메소드
생성자
복사 생성자
operator=
열거 시작하기
Do
Protected 메소드
오버라이드 가능함
EntryFound
FileFound
FolderFound
LinkFound
FolderEntered
FolderExited
파생 클래스들을 위한 추가적인 메소드
GetParent
Stop
GetStatus
설명
이 클래스는 폴더 트리들의 재귀적 열거를 지원합니다. 클래스 Folder는 사용자가 제공한 열거 콜백 함수를 통한 다이렉트 내용(자손)의 열거를 담당합니다. 재귀적 열거는 약간 복잡하며, 열거를 용이하고 유연하게 해줍니다. 이 클래스는 사용자가 오버라이드할 수 있는 기본 구현들을 가진 콜백 함수들의 집합을 캡슐화합니다. 새로운 파일, 폴더, 또는 링크를 발견할 때마다, 그리고 하위 폴더로 들어가거나 나올 때마다 개별 메소드들이 호출됩니다.
사용자는 열거의 루트 폴더를 파라미터로 가진 TreeEnumerator 인스턴스를 생성하고, (Do 메소드를 이용하여) 열거를 시작하고, 다음 순서대로 적절한 메소드들을 호출해야 합니다:
EntryFound 메소드는 특정 폴더 내 각 파일 시스템 엔트리(파일, 폴더, 링크)에 대하여 호출됩니다. 리턴 값이 (기본 구현이) true일 때, 엔트리의 타입에 따라 FileFound, FolderFound 또는 LinkFound 메소드가 호출됩니다. (그 외에는 다음 엔트리가 처리됩니다) 만약 FolderFound 메소드의 리턴 값이 (기본 구현이) true이면, 특정 (하위)폴더의 내용 역시 열거될 것입니다: (하위)열거를 여는 FolderEntered를 호출하면, 적절한 횟수만큼 EntryFound가 호출되고 마지막에는 FolderExited가 (하위)열거를 닫습니다. 만약 LinkFound 메소드의 리턴 값이 (기본 구현이) true이면, 링크의 최종 대상 타입이 결정되고, 이 타입에 따라 FileFound 또는 FolderFound 메소드가 호출됩니다. (링크 대상의 이름이 아닌 링크의 이 메소드 이름을 전달하는 것, 즉 링크는 파일 또는 폴더로 제공됩니다)
폴더 트리를 통해 실행한 후 더 유용한 작업을 수행하려면, (이것은 TreeEnumerator의 기본 구현입니다) 사용자는 TreeEnumerator에서 자신만의 클래스를 파생시키고 적절한 메소드들을 오버라이드해야 합니다. 모든 "콜백" 메소드의 바디 내부에서, 사용자는 현재 엔트리의 부모 폴더 쿼리 또는 열거 중지와 같은 몇 가지 추가 메소드들을 호출할 수 있습니다.
오류가 발생하더라도 열거는 계속됩니다. (예를 들면, 폴더에 대한 접근이 거부됨) 이 경우 1번째 오류의 코드가 저장되고 열거의 결과로 (Do 메소드의 리턴 값으로) 리턴될 것입니다. 콜백 메소드들의 내부에서 열거의 현재 상태는 GetStatus 메소드로 쿼리할 수 있습니다.
심지어 현재 엔트리가 제거되어도 열거는 제대로 작동합니다.
그러나 그 외 엔트리들의 제거 및 열거 중인 폴더 트리의 내용을 변경하는 그 외 동작들에 대해서는 그렇지 않습니다.

- 파일 시스템 엔트리가 링크인지 아닌지 여부를 결정하는 것은 매우 느리고 전체 재귀 열거 프로세스를 크게 늦출 수 있습니다. 만약 이를 받아들일 수 없다면, 링크 처리를 급격히 가속할 수 있는 RestrictLinkExtensions 함수를 고려하십시오.