Qt复制目录,删除目录代码

 最近编写从一个目录copy文件到另外一个目录,递归删除一个目录下的所有文件。其实网上也有参考的代码。不过在删除目录时,不能删除最上级的目录,经过一个下午的测试,终于找到不能删除的原因,原因是,当您处在当前目录是,不能删除该目录。其实解决也很简单,就是向上移动一级目录,即可进行删除,代码如下:
  1. bool HttpDownload::copyDirectoryFiles(const QDir &fromDir, const QDir &toDir, bool coverFileIfExist)
  2. {
  3.   QDir sourceDir = fromDir;
  4.   QDir targetDir = toDir;
  5.   if(!targetDir.exists()){    /**< 如果目标目录不存在,则进行创建 */
  6.     if(!targetDir.mkdir(toDir.absolutePath()))
  7.       return false;
  8.   }
  9.   
  10.   QFileInfoList fileInfoList = sourceDir.entryInfoList();
  11.   foreach(QFileInfo fileInfo, fileInfoList){
  12.     if(fileInfo.fileName() == "." || fileInfo.fileName() == "..")
  13.       continue;

  14.     if(fileInfo.isDir()){    /**< 当为目录时,递归的进行copy */
  15.       if(!copyDirectoryFiles(fileInfo.filePath(),
  16.              targetDir.filePath(fileInfo.fileName()),
  17.              coverFileIfExist))
  18.     return false;
  19.     }
  20.     else{            /**< 当允许覆盖操作时,将旧文件进行删除操作 */
  21.       if(coverFileIfExist && targetDir.exists(fileInfo.fileName())){
  22.     targetDir.remove(fileInfo.fileName());
  23.       }

  24.       /// 进行文件copy
  25.       if(!QFile::copy(fileInfo.filePath(),
  26.          targetDir.filePath(fileInfo.fileName()))){
  27.     return false;
  28.       }
  29.     }
  30.   }
  31.   return true;
  32. }

  33. bool HttpDownload::removeDirectory(QString dirName)
  34. {
  35.   QDir dir(dirName);
  36.   QString tmpdir = "";
  37.   if(!dir.exists()){
  38.     return false;
  39.   }

  40.   QFileInfoList fileInfoList = dir.entryInfoList();
  41.   foreach(QFileInfo fileInfo, fileInfoList){
  42.     if(fileInfo.fileName() == "." || fileInfo.fileName() == "..")
  43.       continue;
  44.     
  45.     if(fileInfo.isDir()){
  46.       tmpdir = dirName + ("/") + fileInfo.fileName();
  47.       removeDirectory(tmpdir);
  48.       dir.rmdir(fileInfo.fileName()); /**< 移除子目录 */
  49.     }
  50.     else if(fileInfo.isFile()){
  51.       QFile tmpFile(fileInfo.fileName());
  52.       dir.remove(tmpFile.fileName()); /**< 删除临时文件 */
  53.     }
  54.     else{
  55.       ;
  56.     }
  57.   }

  58.   dir.cdUp();            /**< 返回上级目录,因为只有返回上级目录,才可以删除这个目录 */
  59.   if(dir.exists(dirName)){
  60.     if(!dir.rmdir(dirName))
  61.       return false;
  62.   }
  63.   return true;
  64. }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值