http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=946519&ref=946519&page=1
안녕하세요. 하위폴더를 검색하여 폴더안의 파일명까지 출력을 하려고 합니다. 여차저차해서 실행이 되는 소스가 있긴한데 경로와 파일명이 출력됐으면 싶은데 (c:/..../파일.jpg) 0076C988이런식의 숫자가 출력됩니다. 이게 뭔지 궁금하고 어디를 수정해야 하나요? 소스 첨부해드립니다. #include <afxwin.h> #include <iostream> #include <vector> using namespace std; void Recurse(LPCTSTR pstr) { cout << "1.pstr => "<< pstr<< endl; cout << "2.Recurse(LPCTSTR pstr) => "<< Recurse<< endl; CFileFind finder; CString strFolderItem , strFileExt; std::vector<CString> m_sCopyList; // build a string with wildcards //와일드 카드 문자열을 구축 CString strWildcard(pstr); cout << "3.CString strWildcard(pstr) => "<< strWildcard << endl; strWildcard += _T("\\*.*"); cout << "4.strWildcard => "<< strWildcard << endl; // start working for files //파일에 대한 작업을 시작 BOOL bWorking = finder.FindFile(strWildcard); cout << "5.bWorking => "<< bWorking << endl; while (bWorking) { bWorking = finder.FindNextFile(); cout << "a.while문 bWorking => "<< bWorking << endl; //http://mynotepad.tistory.com/50소스 if(finder.IsDirectory() && !finder.IsDots()) // 디렉토리 발견시 { strFolderItem = finder.GetFilePath(); Recurse(strFolderItem); cout << "b.디렉토리 발견시 => "<< strFolderItem << endl; cout << "c.디렉토리 발견시 => "<< finder.IsDots() << endl; // 하위폴더를 검색하기 위해 재귀호출 발생 } strFolderItem = finder.GetFilePath(); strFileExt = strFolderItem.Mid(strFolderItem.ReverseFind('.')); cout << "가.strFolderItem => "<< strFolderItem << endl; cout << "나.strFileExt => "<< strFileExt << endl; cout << "다.finder.IsDots() => "<< finder.IsDots() << endl; // 확장자만 추출한다. if (!finder.IsDots()) // 파일 탐색 필터 정의에따라 해당 StringList에 추가 { strFileExt.MakeUpper(); // strFileExt 에는 확장자 (.EXE 형태) 가 들어옴. 비교위해 대문자화 함 if( finder.IsDirectory() ) continue; // 폴더만 남는 경우는 넣으면 안됨 m_sCopyList.push_back(strFolderItem); cout << "라.strFolderItem => "<< strFolderItem << endl; } } finder.Close(); } void main() { if (!AfxWinInit(GetModuleHandle(NULL), NULL, GetCommandLine(), 0)) cout << "panic!" << endl; else{ cout << "start!" << endl; //Recurse(_T("C:/Users/hyunok/Desktop/호연/식물이미지/이미지2차크기줄이기/test/test2")); Recurse(_T("이미지폴더경로")); } }
폴더안에 이미지 파일이 2개 있을 경우에 실행결과입니다. start! 1.pstr => 01034480 2.Recurse(LPCTSTR pstr) => 01031000 3.CString strWildcard(pstr) => 0076C908 4.strWildcard => 0076C908 5.bWorking => 1 a.while문 bWorking => 1 가.strFolderItem => 0076C988 나.strFileExt => 0076C430 다.finder.IsDots() => 1 a.while문 bWorking => 1 가.strFolderItem => 0076D5D0 나.strFileExt => 0076C630 다.finder.IsDots() => 1 a.while문 bWorking => 1 가.strFolderItem => 0076D630 나.strFileExt => 00769498 다.finder.IsDots() => 0 라.strFolderItem => 0076D630 a.while문 bWorking => 0 가.strFolderItem => 0076D6A8 나.strFileExt => 007694C0 다.finder.IsDots() => 0 라.strFolderItem => 0076D6A8 계속하려면 아무 키나 누르십시오 . . . |
답변1
1. cout 은 유니코드 문자열을 출력할 수 없으므로 cout -> wcout 으로 변경
2. cout/wcout 은 CString 타입 문자열을 출력할 수 없으므로 (LPCTSTR)strWildcard 이런식으로 타입캐스팅해서 출력
MFC 클래스인 CString과 C++ 표준 입출력을 함께 사용하는 것은 좋은 아이디어는 아닙니다.
표준 입출력을 사용하려면 std::string/std::wstring 을 사용하시는게 나아요. | |
반응형
'나의질문답' 카테고리의 다른 글
이미지 파일 경로를 읽어 올 때 뒤에 thumbs.db라는게 생깁니다. (0) | 2014.12.09 |
---|---|
cout 한글 출력 질문있습니다. (0) | 2014.12.01 |
push_back에 빨간줄 어떻게 없애나요? (0) | 2014.11.20 |
안드로이드 내장버튼 제어 ? 질문있습니다. (0) | 2014.11.17 |
뒤로가기 버튼시 데이터 가지고 있다가 보여주기 (0) | 2014.11.11 |