Qt 实现文件夹拷贝功能

不多说废话直接上代码,注释详细,文件拷贝是自己封装的,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 + "/");
        }
    }
}
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值