最近编写从一个目录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;
-
}
阅读(9275) | 评论(0) | 转发(1) |