2012. 3. 23. 13:06

손쉽게 File을 나열할 수 있는 class 공유(FindFirstFile/FindNextFile Wrapper)


파일 나열을 위해 FindFirstFile / FindNextFile을 사용하는데,
보통 SubDirectory를 지원하기 위해선 재귀호출을 사용해야 합니다.
그러다보면 자연히 코드가 좀더 너저분해 지는 경향이 있습니다.
그리고, Path의 Component(즉, \...\ 사이에 있는 길이)가 MAX_PATH를 넘어가면 발생하는 문제 해결을 위해,
Naming a file(\\?\를 붙이기)이 필요합니다. 해당 부분도 역시 지원합니다.

다음 code(class)만 추가하면 됩니다.





즉, CFileTraverse를 상속하고,
virtual BOOL OnTraverse(IN LPCTSTR lpszFullPath, IN LPCTSTR lpszNamedPath, IN PWIN32_FIND_DATA pstFD);
만 재정의 하시면 됩니다.

Enum을 중단하려면 FALSE를 리턴하면 됩니다.

위와 같이 class를 정의하고,

와 같이 호출하면, C:\ 하부에 있는 파일을 아래와 같이 나열(_tprintf)합니다.
...
[0x20] C:\eclipse\configuration\org.eclipse.osgi\bundles\321\1\.cp\icons\full\dl
cl16\localtypes_co.gif
[0x20] C:\eclipse\configuration\org.eclipse.osgi\bundles\321\1\.cp\icons\full\dl
cl16\public_co.gif
[0x20] C:\eclipse\configuration\org.eclipse.osgi\bundles\321\1\.cp\icons\full\dl
cl16\static_co.gif
[0x10] C:\eclipse\configuration\org.eclipse.osgi\bundles\321\1\.cp\icons\full\dt
ool16
[0x20] C:\eclipse\configuration\org.eclipse.osgi\bundles\321\1\.cp\icons\full\dt
ool16\mark_occurrences.gif
...