想找个能遍历文件夹的办法,找了下,大概有两种,列举如下
第一种方法就是网上常见的一种方法:
- 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);
- }
实际上还可以利用CFileFind类可以较简洁的实现该功能:
- void 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;
- }
个人感觉第二个好用一点,方便于实现。
第一种本人没有测试过,第二种本人亲测有效!!