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
[57871] Re:findfirst, findnext 질문입니다. 고수님들 많이 봐주세요....
김태선 [cppbuilder] 1349 읽음    2009-07-31 15:26
저도 findfirst, findnext 많이 씁니다만,
파일수가 몇개이던지 간에 초고속으로 한방에 파일리스트를 만드는데 매우 유용합니다.
물론 루프에 Sleep 같은 것은 넣지 않습니다.
보통 루프 내에서는 리스트만 형성하게 하고 다른 작업은 리스트를 만든 뒤에
작업하도록 합니다.

아마도 중간에 예외가 나서 함수를 빠져 나가는게 아닌가 생각됩니다만
루프 중간에 하는 몇가지 작업을 잘 검토해 보세요.
특히 루프 중에 계속 현재 목록을 화면에 표시하도록 한다면
그건 반드시 문제를 일으킵니다.
이런 경우는 팁란에 제가 올린 일정 시간 마다 화면 표시를 갱신해주는 기법이 있는데
그걸 쓰시면 됩니다.
루프내에 Sleep 은 전혀 넣을 필요가 없습니다.


한영모 님이 쓰신 글 :
: 아래 소스를 보시면 recursive로 file을 찾는데요....
:
: source 맨 아래쪽 3번째 줄의 Sleep(1)을 주지 않으면 제대로 폴더나 파일을 인식하지 않습니다.
:
: directory는 약 400여개 파일갯수는 4500개 정도인데....
:
: Sleep을 주지 않으면 파일및 폴더가 1/3 정도 밖에 나오지를 않는 군요...
:
: Sleep을 주자니 너무 오래걸리구요....
:
: 고수님들의 의견을 듣고 싶습니다.
:
: 참고로 Total commander는 1~2초 걸리더군요...
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:     String asBase="d:\\testfolder";
:
:
:     m_fp = _creat("filelist.dat",S_IREAD |S_IWRITE);
:     _fmode = O_BINARY;
:     m_GetDir(asBase);
:     close(m_fp);
: }
: //---------------------------------------------------------------------------
: void TForm1::m_GetDir(String asDir)
: {
:     TSearchRec stFiles;
:     int nStatus, Attr=0;
:     UINT64 nSize;
:     TFileDIDList stList;
:
:     chdir(asDir.c_str());
:
: //exLogClass->Display("Current Directory => %s",exCurrentDirectory());
:
:     Attr |= faReadOnly ;
:     Attr |= faSysFile  ;
:     Attr |= faVolumeID ;
:     Attr |= faArchive  ;
:     Attr |= faAnyFile  ;
:     Attr |= faDirectory;
:
:     nStatus = FindFirst("*.*", Attr, stFiles);
:     if (nStatus != 0)
:     {
:         FindClose(stFiles);
:         return;
:     }
:     do
:     {
:         if ((stFiles.Attr & faDirectory) == faDirectory)
:         {
:             if ((stFiles.Name == ".") || (stFiles.Name == ".."))
:             {
:             }
:             else
:             {           
:                 if ((stFiles.Attr & faHidden) == faHidden)
:                 {
:                 }
:                 else
:                 {
:                     m_GetDir(asDir + "\\" + stFiles.Name);
:                     chdir(asDir.c_str());
:                 }
:             }
:         }
:         else
:         {
: exLogClass->Display("Find Name => %s\\%s",asDir,stFiles.Name);
:             stList.nDirNameSize = asDir.Length();
:             sprintf(stList.szDirName,"%s",asDir);
:             stList.nFileNameSize = stFiles.Name.Length();
:             sprintf(stList.szFileName,"%s",stFiles.Name);
:             stList.nFileSize = stFiles.Size;
:
:             write(m_fp, &stList.nDirNameSize, 2);
:             write(m_fp, stList.szDirName, stList.nDirNameSize);
:             write(m_fp, &stList.nFileNameSize, 2);
:             write(m_fp, stList.szFileName, stList.nFileNameSize);
:             write(m_fp, &stList.nFileSize, sizeof(UINT64));
:         }
:         ::Sleep(1);
:     } while (FindNext(stFiles) == 0);
:     FindClose(stFiles);
: }

+ -

관련 글 리스트
57869 findfirst, findnext 질문입니다. 고수님들 많이 봐주세요.... 한영모 1325 2009/07/31
57871     Re:findfirst, findnext 질문입니다. 고수님들 많이 봐주세요.... 김태선 1349 2009/07/31
57873         Re:Re:findfirst, findnext 질문입니다. 고수님들 많이 봐주세요....(김태선님 감사합니다.) 한영모 1344 2009/07/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.