最近编写从一个目录copy文件到另外一个目录,递归删除一个目录下的所有文件。其实网上也有参考的代码。不过在删除目录时,不能删除最上级的目录,经过一个下午的测试,终于找到不能删除的原因,原因是,当您处在当前目录是,不能删除该目录。其实解决也很简单,就是向上移动一级目录,即可进行删除,代码如下:
- bool HttpDownload::copyDirectoryFiles(const QDir &fromDir, const QDir &toDir, bool coverFileIfExist)
- {
- QDir sourceDir = fromDir;
- QDir targetDir = toDir;
- if(!targetDir.exists()){ /**< 如果目标目录不存在,则进行创建 */
- if(!targetDir.mkdir(toDir.absolutePath()))
- return false;
- }
-
- QFileInfoList fileInfoList = sourceDir.entryInfoList();
- foreach(QFileInfo fileInfo, fileInfoList){
- if(fileInfo.fileName() == "." || fileInfo.fileName() == "..")
- continue;
- if(fileInfo.isDir()){ /**< 当为目录时,递归的进行copy */
- if(!copyDirectoryFiles(fileInfo.filePath(),
- targetDir.filePath(fileInfo.fileName()),
- coverFileIfExist))
- return false;
- }
- else{ /**< 当允许覆盖操作时,将旧文件进行删除操作 */
- if(coverFileIfExist && targetDir.exists(fileInfo.fileName())){
- targetDir.remove(fileInfo.fileName());
- }
- /// 进行文件copy
- if(!QFile::copy(fileInfo.filePath(),
- targetDir.filePath(fileInfo.fileName()))){
- return false;
- }
- }
- }
- return true;
- }
- bool HttpDownload::removeDirectory(QString dirName)
- {
- QDir dir(dirName);
- QString tmpdir = "";
- if(!dir.exists()){
- return false;
- }
- QFileInfoList fileInfoList = dir.entryInfoList();
- foreach(QFileInfo fileInfo, fileInfoList){
- if(fileInfo.fileName() == "." || fileInfo.fileName() == "..")
- continue;
-
- if(fileInfo.isDir()){
- tmpdir = dirName + ("/") + fileInfo.fileName();
- removeDirectory(tmpdir);
- dir.rmdir(fileInfo.fileName()); /**< 移除子目录 */
- }
- else if(fileInfo.isFile()){
- QFile tmpFile(fileInfo.fileName());
- dir.remove(tmpFile.fileName()); /**< 删除临时文件 */
- }
- else{
- ;
- }
- }
- dir.cdUp(); /**< 返回上级目录,因为只有返回上级目录,才可以删除这个目录 */
- if(dir.exists(dirName)){
- if(!dir.rmdir(dirName))
- return false;
- }
- return true;
- }