MFC 中 删除一个非空文件夹 (MFC 文件操作 一)

      最近在看MFC 的文件操作,从网上淘了一本比较讲MFC文件操作比较全的电子书,然后开始试手。在删除文件夹时,遇到了问题,通过查看MSDN和网友的论坛留言,自己总算是解决了这个问题,现在与大家共享。

 

      MFC中提供了删除文件夹的一个封装函数 RemoveDirectory(LPCTSTR lpPathName),我们只要把要删除的文件夹的路径传进去就可以删除了,貌似一切如此简单。我象征性的建立一个文件夹,然后在程序中删除了它,呵呵,一下就成功了。正当我要转手去做另外的操作时,我喜欢乱尝试的毛病就鬼使神差的让我做了这么一件事,在这个文件夹下我添加了几个新的子文件夹以及一些文件,这下我再试我的程序时就出现问题了,删不掉了!!

 

      原来-------RemoveDirectory(LPCTSTR lpPathName)欺骗了我,他只能删除空的文件夹,这下我有问题了,怎么才能删除一个文件夹,即便其中含有无数的子文件和子文件夹呢?

 

     RemoveDirectory(LPCTSTR lpPathName) 的这种行为其实是情有可原的,它为我们的操作提供了一种安全级别的控制。

     但我现在就想删除非空文件夹 , 怎么办呢????

 

 

     递归删除!!

 

     看到论坛上有人提出这一思想,我感觉很有道理,于是就基于这一思想,着手实现它!

 

     首先将文件夹下所有内容删除,再调用RemoveDirectory(LPCTSTR lpPathName)不就可以实现了么!!

 

     为此我专门写了一个函数来递归删除一个文件夹下的所有内容!

 

     请看我的代码

 

[cpp]  view plain  copy
  1. void myDeleteDirectory(CString directory_path)   //删除一个文件夹下的所有内容  
  2. {     
  3.     CFileFind finder;  
  4.     CString path;  
  5.     path.Format("%s/*.*",directory_path);  
  6.     BOOL bWorking = finder.FindFile(path);  
  7.     while(bWorking){  
  8.         bWorking = finder.FindNextFile();  
  9.         if(finder.IsDirectory() && !finder.IsDots()){//处理文件夹  
  10.             myDeleteDirectory(finder.GetFilePath()); //递归删除文件夹  
  11.             RemoveDirectory(finder.GetFilePath());  
  12.         }  
  13.         else{//处理文件  
  14.             DeleteFile(finder.GetFilePath());  
  15.         }  
  16.     }  
  17. }  

 

     定义一个 CFileFind 类对象 来找文件夹下的所有子文件和子文件夹,然后依次判断它是 文件 还是 文件夹,

     如果是文件 就直接删除了,如果是文件夹就递归调用 该 myDeleteDirectory()函数,来删除其内容。然后在调用RemoveDirectory()来删除这个文件夹,这样不就好了么?

 

      为了测试我的程序是否是正确的,我创建了一个文件夹 ForVcTest,在其中添加了许多的子文件和文件夹,又在子文件夹中添加了文件和文件夹。写了这么一段测试程序,诸位请看:

 

[cpp]  view plain  copy
  1. void DeleteAllDirectory() //删除文件夹  包括非空的文件夹  
  2. {  
  3.     //第一步 删除 该文件夹下所有文件  
  4.       myDeleteDirectory("C:/ForVcTest");  
  5.       
  6.     //第二步 删除该空文件夹  
  7.      RemoveDirectory("C:/ForVcTest");  
  8. }  

 

     测试结果出来了,我眼看着一个内容丰富的文件夹,就在我的程序运行后消失了!真是很舒心啊!呵呵!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值