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
[57869] findfirst, findnext 질문입니다. 고수님들 많이 봐주세요....
한영모 [myinok] 1325 읽음    2009-07-31 14:54
아래 소스를 보시면 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 질문입니다. 고수님들 많이 봐주세요.... 김태선 1350 2009/07/31
57873         Re:Re:findfirst, findnext 질문입니다. 고수님들 많이 봐주세요....(김태선님 감사합니다.) 한영모 1344 2009/07/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.