您的位置:首页 > 其它

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

2011-07-30 17:49 501 查看
转载原文/article/1621591.html

上一篇博文中已经提到了CFileFind类,并且用它实现了删除任意文件夹,此处不再对其赘述。

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

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

回到正题。

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

请看源代码:

view plaincopy to clipboardprint?

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

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

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