不多说废话直接上代码,注释详细,文件拷贝是自己封装的,Qt有现成的API-QFile::copy(),
void MainDialog::copyFolder(const QString& sourcePath,const QString& targetPath)
{
QDir sourceDir(sourcePath);
if(!sourceDir.exists() || sourceDir.isEmpty()){
return;
}
QDir targetDir(targetPath);
if(!targetDir.exists()){
if(!targetDir.mkpath(targetPath)){
qDebug()<<"创建文件夹失败";
LOG_ERROR2("创建文件夹失败{%1}",targetPath);
return;
}
}
sourceDir.setFilter(QDir::NoDotAndDotDot | QDir::AllEntries);
QStringList sourceFileList = sourceDir.entryList();
for(auto& i : sourceFileList){
QFileInfo fileInfo(sourcePath + i);
if(fileInfo.isFile()){
QFile file(targetPath + i);
if(!file.exists()){
if(!qfileUtil::copyFile(sourcePath + i,targetPath + i)){
LOG_ERROR3("文件{%1}向{%2}拷贝失败",sourcePath + i,targetPath + i);
qDebug()<<"拷贝失败";
return;
}
}
}
if(fileInfo.isDir()){
if(!targetDir.exists(targetDir.absolutePath() + "/" + i)){
if(!targetDir.mkdir(i)){
LOG_ERROR3("文件夹{%1}向{%2}拷贝失败",sourcePath + i,targetPath + i);
qDebug()<<"文件夹拷贝失败";
return;
}
}
this->copyFolder(sourcePath + i + "/",targetPath + i + "/");
}
}
}