void Recurse(CString strDir,CString strExt)
{
//在指定目录下查找指定扩展名的文件
CFileFind finder;
CString strCurrDir;
strCurrDir = strDir + _T("\\*.*");
BOOL bWorking = finder.FindFile(strCurrDir);
while(bWorking)
{
bWorking = finder.FindNextFile();
CString tempFileName = finder.GetFilePath();
//cout<< (LPCTSTR) temp<<endl;
if(finder.IsDots())continue;
if(finder.IsDirectory())
{
CString str = finder.GetFilePath();
// cout << (LPCTSTR) str << endl;
Recurse(str,strExt);
}
else
{
//MessageBox(tempFileName);
CString strCurrFileExt = tempFileName.Right(tempFileName.GetLength() - tempFileName.ReverseFind(_T('.')));
//MessageBox(strCurrFileExt);
CString strCurrFileName = tempFileName.Right(tempFileName.GetLength() - tempFileName.ReverseFind(_T('\\')) - 1);
//MessageBox(strCurrFileName);
CString strDstFileName = m_strOutputPath + _T("\\") + strCurrFileName;
//MessageBox(strDstFileName);
if(0 == strCurrFileExt.Compare(strExt))
{
int nRet = MCopyFile(tempFileName,strDstFileName,this->m_bCoverWrite);
CString strMsg = strCurrFileName;
if(0 == nRet)
{
m_nCountFindFilsCopySuccess++;
strMsg += _T(" :Success");
}
else if(-1 == nRet)
{
CString str;
str.Format(_T("复制文件%s时失败,该文件已存在!"),tempFileName);
//MessageBox(str);
strMsg += _T(" :") + str;
}
m_ctrlListFiles.InsertString(m_nCountTotalFilesFinded,strMsg);
m_ctrlListFiles.SetCurSel(m_nCountTotalFilesFinded);
m_nCountTotalFilesFinded++;
}
//MessageBox(strCurrFileExt);
}
}
finder.Close();
}
int MCopyFile(CString strSrc, CString strDest, BOOL cover)
{
//复制指定文件到指定目标,是否覆盖
if(!cover)
{
if(PathFileExists(strDest))return -1;
}
CopyFile(strSrc, strDest, cover);
return 0;
}
使用PathFileExists(CString)函数,需要
#include <shlwapi.h>
#pragma comment(lib,"Shlwapi.lib")
以上两个函数调用方法:
Recurse(m_strInputPath,m_strExt);