您的位置:首页 > 其它

MFC 运用CFileFind 类 递归实现文件夹的 复制 (MFC 文件操作 二)

2010-08-03 13:00 483 查看
上一篇博文中已经提到了CFileFind类,并且用它实现了删除任意文件夹,此处不再对其赘述。



在实现文件复制过程时,一个问题i是我纠结了许久,CFileFind 类的成员函数 GetFilePath()与GetFileName(),其实很好理解的两个函数,一个是获得文件的路径,一个是获得文件的名字。但我却在理解上犯了一个错误,就是文件路径究竟包不包含文件名字,如有文件C:/Test/1.txt ,那么它的路径和名称分别是什么?我理解成了,路径:C:/Test 名称1.txt ,我按照我的理解编写这个复制功能的实现代码,老师出错,最后我才发现,原来 路径是包含文件名称的 ,即上面的文件 路径即是:C:/Test/1.txt。



似乎是个很低级的错误,但是的确困扰了我一段时间。



回到正题。



具体的实现思想类似于上一篇博文“MFC 中 删除一个非空文件夹”



请看源代码:

void myCopyDirectory(CString source, CString target)
{
	CreateDirectory(target,NULL); //创建目标文件夹
	//AfxMessageBox("创建文件夹"+target);
	CFileFind finder;
	CString path;
        path.Format("%s/*.*",source);
	AfxMessageBox(path);
	bool bWorking = finder.FindFile(path);
	while(bWorking){
		bWorking = finder.FindNextFile();
		AfxMessageBox(finder.GetFileName());
		if(finder.IsDirectory() && !finder.IsDots()){ //是文件夹 而且 名称不含 . 或 ..
			myCopyDirectory(finder.GetFilePath(),target+"/"+finder.GetFileName()); //递归创建文件夹+"/"+finder.GetFileName()
		}
		else{ //是文件 则直接复制
			//AfxMessageBox("复制文件"+finder.GetFilePath());//+finder.GetFileName()
			CopyFile(finder.GetFilePath(),target+"/"+finder.GetFileName(),FALSE);
		}
	}
}





源代码不是很难理解,不再详解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐