MFC 遍历目录下指定类型的文件并复制

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);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值