C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[41302] Re:Re:감사합니다 ^^
프리지아 [] 708 읽음    2005-08-03 08:17
더운데 수고많으시네요~
항상 도움만 받네요
저도 어여 다른분들께 도움이될 실력을 키워야 겠어요 ㅋㅋ


유영인  Cuperido 님이 쓰신 글 :
: 재귀 호출시에 Deep을 설정해 주시면 될 것 같습니다.
:
: 선언문에, 기본 Deep는 0 이 Default가 되도록 설정해 주시고,
: void __fastcall TForm1::GetDirView(AnsiString Dir, int itDeep = 0);
:
: void __fastcall TForm1::GetDirView(AnsiString Dir, int itDeep)
: {
:         TSearchRec sr;
:         int iAttributes = 0;
:         AnsiString iDir; //GetDirView()내에서만 사용할 패스변수 선언
:
:         AnsiString stName;
:
:         iAttributes |= faReadOnly * 0; //파일 옵션
:         iAttributes |= faHidden * 0;
:         iAttributes |= faSysFile * 0;
:         iAttributes |= faVolumeID * 0;
:         iAttributes |= faDirectory * 0;
:         iAttributes |= faArchive * 0;
:         iAttributes |= faAnyFile * 1;
:
:         iDir = Dir; //인자로 받아온 패스를 iDir에 저장
:         int len=iDir.Length();
:         if(iDir[len]=='\\')   //iDir의 마지막 문자가 '\\'인지 아닌지
:                 iDir += "*.*";
:         else
:                 iDir += "\\*.*";
:
:
:         if (FindFirst(iDir, iAttributes, sr) == 0) //찾는 파일이 있으면..
:         {
:                 do{
:
:                  // 이 부분이 새롭게 들어갑니다. deep 만큼 tab을 추가합니다.
:                   stName = "";
:                   for(int itTabCount = 0; itTabCount < itDeep; itTabCount ++)
:                     stName = stName + char(9);
:                   stName += sr.Name;
:
:                         if ((sr.Attr & faDirectory) == 0)//찾은 파일이 디렉토리가 아니면..
:                                 Memo1->Lines->Add(stName);
:                         else{
:                                 if (sr.Name != "." && sr.Name != ".."){ // ".", ".." 두 디렉토리는 출력에서 제외시킴
:                                         Memo1->Lines->Add("[DIR]  "+ stName);
:                                         AnsiString subDir;
:                                         subDir = Dir;
:        
:                                        // 이 아래 부분 \\ 이 없어서 재귀 호출 에러가 발생되더군요. :(
:                                         subDir += "\\" + sr.Name;
:                                         GetDirView(subDir+"\\", itDeep + 1);
:                                 }
:                         }
:                 }while(FindNext(sr) == 0); //다음 파일찾기, 다음찾은 파일이 없을때까지 do-while문 반복
:         }
:         FindClose(sr);
: }
:
: stName에 탭을 추가 하는 부분이 파일마다 계속 반복되니,
: 먼저 Tab만큼 이쁘게 띄워주고 그것을 stHeader로 정의하시고
: 나중에 파일 안에서 헤더만큼 더해 주는 것이 속도면에서도 좋을것 같습니다.
: (여기서는 간단히 속도 계산 안하고 테스트 용도로만.. ^^)
:
:
: cuperido
:
:
: 프리지아 님이 쓰신 글 :
: : 포럼 참고해서 만들어 봤습니다.
: : 나름대로 잘 돌아가는데...
: : 상위 디렉토리나 파일과 하위디렉토리 파일간에 구분이 안가네요 ^^;;
: : [DIR]windows
: :                     [DIR] Program Files
: :                                          [DIR]Alzip
: :                                                          [DIR]Temp                       
: :                                                          Alzip.exe
: : [DIR]Program Files
: :
: : 이런식으로 탭키로 구분을 해주거나
: : 아님 Memo말고 TreeView같은걸로 더 쉽게 해줄 방법이 없을까요?
: :
: :
: :
: :
: : void __fastcall TForm1::GetDirView(AnsiString Dir)
: : {
: :         TSearchRec sr;
: :         int iAttributes = 0;
: :         AnsiString iDir; //GetDirView()내에서만 사용할 패스변수 선언
: :
: :         iAttributes |= faReadOnly * 0; //파일 옵션
: :         iAttributes |= faHidden * 0;
: :         iAttributes |= faSysFile * 0;
: :         iAttributes |= faVolumeID * 0;
: :         iAttributes |= faDirectory * 0;
: :         iAttributes |= faArchive * 0;
: :         iAttributes |= faAnyFile * 1;
: :
: :         iDir = Dir; //인자로 받아온 패스를 iDir에 저장
: :         int len=iDir.Length();
: :         if(iDir[len]=='\\')   //iDir의 마지막 문자가 '\\'인지 아닌지
: :                 iDir += "*.*";
: :         else
: :                 iDir += "\\*.*";
: :
: :
: :         if (FindFirst(iDir, iAttributes, sr) == 0) //찾는 파일이 있으면..
: :         {
: :                 do{
: :                         if ((sr.Attr & faDirectory) == 0)//찾은 파일이 디렉토리가 아니면..
: :                                 Memo1->Lines->Add(sr.Name);
: :                         else{
: :                                 if (sr.Name != "." && sr.Name != ".."){ // ".", ".." 두 디렉토리는 출력에서 제외시킴
: :                                         Memo1->Lines->Add("[DIR]  "+sr.Name);
: :                                         AnsiString subDir;
: :                                         subDir = Dir;
: :                                         subDir += sr.Name;
: :                                         GetDirView(subDir+"\\");
: :                                 }
: :                         }
: :                 }while(FindNext(sr) == 0); //다음 파일찾기, 다음찾은 파일이 없을때까지 do-while문 반복
: :         }
: :         FindClose(sr);
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: :         Memo1->Clear();
: :         GetDirView("D:\\");
: : }
: : //---------------------------------------------------------------------------

+ -

관련 글 리스트
41297 Memo에 디렉토리 및 파일 뿌리기 ;; 프리지아 944 2005/08/02
41298     Re:Memo에 디렉토리 및 파일 뿌리기 ;; 유영인 Cuperido 1127 2005/08/02
41302         Re:Re:감사합니다 ^^ 프리지아 708 2005/08/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.