编程时碰到了一个文件夹复制的问题,需要拷贝文件夹下的所有文件夹(如果有)和文件(所有类型),总结了一种用递归的方法来实现查找文件夹下的所有文件并复制,在MFC中实非常简单。具体过程为:新建一个对话框的程序,工程名为:Copyfolder,添加两个静态控件,caption改为原路径和目标路径,再添加两个与之对应的文本编辑框,修改ID,关联两个成员变量:
CString m_strSrc;//原路径
CString m_strDst;//目标路径
添加一个成员函数:
-
void CCopyfolderDlg::CopyDirectory(CString source, CString target)
-
{
-
CreateDirectory(target,NULL); //获取目标拷贝的路径 拷贝至哪里
-
CFileFind finder;
-
CString path=source+_T("\\*.*"); //需要拷贝的文件的路径
-
// AfxMessageBox(path); //调试用
-
bool bWorking = finder.FindFile(path); //是否找到了需要拷贝的文件的路径
-
while(bWorking){
-
bWorking = finder.FindNextFile();
-
//AfxMessageBox(finder.GetFileName()); //调试用
-
if(finder.IsDirectory() && !finder.IsDots()){ //是不是有效的文件夹
-
CopyDirectory(finder.GetFilePath(),target+_T("\\")+finder.GetFileName()); //递归查找文件夹
-
}
-
else{ //是文件则直接复制
-
CopyFile(finder.GetFilePath(),target+_T("\\")+finder.GetFileName(),FALSE); //拷贝文件夹下的所有文件
-
}
-
}
-
}
最后在给确定按钮添加消息响应函数,在这个函数中调用即可:
-
void CCopyfolderDlg::OnBnClickedOk()
-
{
-
UpdateData(true);//两个路径获取值
-
CopyDirectory(m_strSrc,m_strDst);
-
AfxMessageBox(_T("复制成功!"));
-
OnOK();
-
}
生成的界面如下图所示:
以上即为在MFC中实现文件夹拷贝的全过程。后续再遇到了其他的实现方法在做补充!