ytlee64 | naver http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10104&eid=QQR7Hp2tCmrNrRKcw4dnnk+4FbHYPN3O&qb=YysrILXwt7rF5Liu
CFile Members from MSDN http://msdn.microsoft.com/ko-kr/library/3d65ch27.aspx
====================================================================================
콘솔에서 폴더를 탐색하길 원할떄 사용..
MFC를 사용하기 위해 afx.h를 include 한다.
아래 소스는 단순히 현재 폴더내용만 보일 뿐이다(디렉토리)
디렉토리 목록에
.
..
가 포함되는건 NG...
#include < afx.h >
#include <iostream>
using namespace std;
void main( void )
{
CFileFind finder;
BOOL bWorking = finder.FindFile("C:\\*");
while (bWorking)
{
bWorking = finder.FindNextFile();
if(finder.IsDirectory())
cout << (LPCTSTR) finder.GetFileName() << endl;
}
}
위에서 폴더만 나오게 개조? 하위 폴더까지 나오게 하면 아래와 같이 된다.
#include < afx.h >
#include <iostream>
using namespace std;
int cnt = 20;
void print(CString input)
{
CFileFind finder;
BOOL bWorking = finder.FindFile(input);
while (bWorking)
{
bWorking = finder.FindNextFile();
if(finder.IsDirectory() && !finder.IsDots())
{
//print dir name
cout << (LPCTSTR) finder.GetFileName() << endl;
//remove * mark
input.Delete(input.GetLength()-1);
//add dir name and \\*
input = input + (LPCTSTR) finder.GetFileName() + "\\*";
print(input);
}
}
}
void main( void )
{
CString path = "c:\\samp\\*";
print(path);
}
파일 경로가 c:\\abc\\* 이런식이라
재귀로 탐색해 내려가기 위해서는 끝의 * 를 제거할 필요가 있었다.
때문에 CString.Delete(int index) 를 사용하였고 해당하는 위치가 마지막 위치였기에
CString.Delete(CString.GetLength()-1) 와 같이 사용하였다.
포지션은 0기준으로 인덱싱되고 GetLength의 리턴값은 사람이 인지하는 숫자세기인 까닭에 1차이가 난다.
(한마디로 1 빼야된단 소리)
CFileFind.GetFileName() 으로 이름을 받아왔다.
추가로 ~.IsDots() 메소드가 있으니 사용하길...
폴더 출력중의...
.
..
를 제거 할 수가 있다.
저 메소드 몰라 삽질을... (모르면 고생이란 말이 맞는 듯 하다)
*** 앞에 (LPCTSTR) 의 의미는 따로 알아볼 필요가 있을듯