遍历指定文件夹下的所有文件(包括子文件夹下)

int FindFileInDir(char* rootDir, char* strRet)
{
 char fname[512];
 ZeroMemory(fname,512);
 WIN32_FIND_DATA fd;
 ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
 
 char filePathName[256];
 char tmpPath[256];
 ZeroMemory(filePathName, 256);
 ZeroMemory(tmpPath, 256);
 strcpy(filePathName, rootDir);
 
 if( filePathName[strlen(filePathName) -1] != '\\')
 {
  strcat(filePathName, "\\");
 }
 strcat(filePathName, "*");
 

 HANDLE hSearch;
 hSearch = FindFirstFile(filePathName, &fd);
 //Is directory
 if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  && strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, ".."))
 {
  strcpy(tmpPath, rootDir);
  strcat(tmpPath, fd.cFileName);
  FindFileInDir(tmpPath, strRet);
 }
 else if( strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, ".."))
 {
  sprintf(fname, "%-50.50s", fd.cFileName);
  strcat(strRet + strRet[strlen(strRet)] , fname);
 }

 BOOL bSearchFinished = FALSE;
 while( !bSearchFinished )
 {
  if( FindNextFile(hSearch, &fd))
  {
   if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    && strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, ".."))
   {
    strcpy(tmpPath, rootDir);
    strcat(tmpPath, fd.cFileName);
    FindFileInDir(tmpPath, strRet);
   }
   else if( strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, ".."))
   {
    sprintf(fname, "%-50.50s", fd.cFileName);
    strcat(strRet + strRet[strlen(strRet)] , fname);
   }
  }
  else
  {
   if( GetLastError() == ERROR_NO_MORE_FILES )          //Normal Finished
   {
    bSearchFinished = TRUE;
   }
   else
    bSearchFinished = FALSE;     //Terminate Search
  }
 }
 FindClose(hSearch);

 return 0;
}

posted @ 2009-01-06 11:17  justinpan  阅读(635)  评论(0编辑  收藏  举报