遍歷文件夾下所有文件和文件夾

1 void find(char * lpPath)
{
  char szFind[MAX_PATH];
  WIN32_FIND_DATA FindFileData;
  strcpy(szFind,lpPath);
  strcat(szFind,"*.*");
  HANDLEhFind=::FindFirstFile(szFind,&FindFileData);
  if(INVALID_HANDLE_VALUE == hFind)  return;
  while(TRUE)
  {
    if(FindFileData.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)
    {
      if(FindFileData.cFileName[0]!='.')
      {
        strcpy(szFile,lpPath);
        strcat(szFile,"");
        strcat(szFile,FindFileData.cFileName);
        find(szFile);
      }
    }
    else
    {
      cout <<FindFileData.cFileName;
    }
    if(!FindNextFile(hFind,&FindFileData))  break;
  }
  FindClose(hFind);
}

2.利用CFileFind類較簡潔的實現該功能

void CModelDlg::FindBmpFile(CString strFoldername)

{
 
   CStringm_cstrFileList="";
    CFileFindtempFind;

    BOOL bFound;//判斷是否成功找到文件

   bFound=tempFind.FindFile(strFoldername  +  "\\*.*");   /修改""內內容給限定查找文件類型

    CStringstrTmp;   //如果找到的是文件夾存放文件夾路徑

   while(bFound)     //遍歷所有文件
    {
       bFound=tempFind.FindNextFile();//第一次執行FindNextFile是選擇到第一個文件,以後執行爲選擇
                                         //到下一個文件
          if(!tempFind.IsDots()) continue; //如果找到的是返回上層的目錄 則結束本次查找

           if(tempFind.IsDirectory())  //找到的是文件夾,則遍歷該文件夾下的文件
          {
               strTmp="";
               strTmp=tempFind.GetFilePath();
               FindFile(strTmp);
           }
           else
           {
               strTmp=tempFind.GetFileName(); //保存文件名,包括後綴名
                // 在此處添加對找到文件的處理
           }
    }

   tempFind.Close();

   return;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章