1.使用网上最普通的方法
find(char * lpPath) { char szFind[MAX_PATH]; WIN32_FIND_DATA FindFileData; strcpy(szFind,lpPath); strcat(szFind,"*.*"); HANDLE hFind=::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) { CString m_cstrFileList=""; CFileFind tempFind; BOOL bFound; //判断是否成功找到文件 bFound=tempFind.FindFile(strFoldername + "\\*.*"); /修改" "内内容给限定查找文件类型 CString strTmp; //如果找到的是文件夹 存放文件夹路径 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; }