|
아래 소스를 보시면 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);
}
|