Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2538577
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2011-09-07 17:54:53

   最近编写从一个目录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. }
阅读(9285) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~