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

  

转载原文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 中 删除一个非空文件夹”

 

    请看源代码: 

  1. void myCopyDirectory(CString source, CString target)  
  2. {  
  3.     CreateDirectory(target,NULL); //创建目标文件夹   
  4.     //AfxMessageBox("创建文件夹"+target);   
  5.     CFileFind finder;  
  6.     CString path;  
  7.         path.Format("%s/*.*",source);  
  8.     AfxMessageBox(path);  
  9.     bool bWorking = finder.FindFile(path);  
  10.     while(bWorking){  
  11.         bWorking = finder.FindNextFile();  
  12.         AfxMessageBox(finder.GetFileName());  
  13.         if(finder.IsDirectory() && !finder.IsDots()){ //是文件夹 而且 名称不含 . 或 ..   
  14.             myCopyDirectory(finder.GetFilePath(),target+"/"+finder.GetFileName()); //递归创建文件夹+"/"+finder.GetFileName()   
  15.         }  
  16.         else//是文件 则直接复制   
  17.             //AfxMessageBox("复制文件"+finder.GetFilePath());//+finder.GetFileName()   
  18.             CopyFile(finder.GetFilePath(),target+"/"+finder.GetFileName(),FALSE);  
  19.         }  
  20.     }  
  21. }  

 

   

    源代码不是很难理解,不再详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值