|
그러네요...안돌아가는게 아니구 자료는 제대로 저장은 되었네요.
제가 저장된 파일을 제대로 확인을 안해 봤네요....
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);
: : }
|