Qt 实现文件夹拷贝功能

Posted tangbolibao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 + "/");
        
    

以上是关于Qt 实现文件夹拷贝功能的主要内容,如果未能解决你的问题,请参考以下文章

Qt 实现文件夹拷贝功能

QT程序打包

QT程序自动拷贝所需动态库批处理

QT程序自动拷贝所需动态库批处理

qt中拷贝文件和文件夹

PyQt5数据库开发3 6 QSqlQuery完整实操案例图文详解