转载原文http://blog.csdn.net/jarvischu/article/details/5784875
上一篇博文中已经提到了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);
- }
- }
- }
源代码不是很难理解,不再详解