现在的位置: 首页 > 综合 > 正文

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

2014年10月19日 ⁄ 综合 ⁄ 共 1837字 ⁄ 字号 评论关闭

 最近编写从一个目录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. }

抱歉!评论已关闭.