如何遍历所有文件夹,获取某一类型文件

遍历文件有两种方法:

使用的是WinAPI,比较通用的方法就是

void CEMFSOpenFileWnd::FindFiles(LPCWSTR szPath, std::vector<CString>& vecPath)
{
HANDLE hFind(NULL);
WIN32_FIND_DATAW FindFileData;
BOOL bNext = TRUE;
      WCHAR FillPath[MAX_PATH];
       snsprintf(FillPath,TEXT("%s%s"),szPath,TEXT("\\*.*"));
hFind = FindFirstFileW(FillPath, &FindFileData);
if(hFind != INVALID_HANDLE_VALUE )
{
while(bNext)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(wcscmp(FindFileData.cFileName,L".") == 0|| wcscmp(FindFileData.cFileName,L"..") == 0)
{
bNext=FindNextFileW(hFind, &FindFileData);
continue;
}
else
{
WCHAR szFolder[MAX_PATH];
snsprintf(szFolder,TEXT("%s\\%s"),szPath,FindFileData.cFileName);
FindFiles(szFolder, vecPath);
}
}
else
{
CString str;
str.Format(TEXT("%s\\%s"),szPath,FindFileData.cFileName);
int nIndex=str.ReverseFind('.');
CString str1=str.Mid(nIndex+1);
if(snstrcmp(str1,m_strFilter)==0)                 //m_strFilter是你要查询的文件类型的后缀名
{
  vecPath.push_back(str);
}
}
if(!FindNextFileW(hFind, &FindFileData))
break;
}
FindClose(hFind);
}
}

如果使用的是MFC,则还有一种比较简单的方法

void FindFile(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; 
}

MFC封装好了CFileFind类,很方便我们使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值