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
[57873] Re:Re:findfirst, findnext 질문입니다. 고수님들 많이 봐주세요....(김태선님 감사합니다.)
한영모 [myinok] 1343 읽음    2009-07-31 17:38
그러네요...안돌아가는게 아니구 자료는 제대로 저장은 되었네요.

제가 저장된 파일을 제대로 확인을 안해 봤네요....

debugging 용으로 띄어놓은 창이 제대로 동작을 안한거네요....

김태선님 감사합니다.

김태선 님이 쓰신 글 :
: 저도 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 질문입니다. 고수님들 많이 봐주세요....(김태선님 감사합니다.) 한영모 1343 2009/07/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.