Qt复制文件夹及文件夹下所有文件

Qt没有直接提供复制文件夹及文件夹下的文件,而是提供了另外两个函数。
创建文件夹bool QDir::mkpath(const QString &dirPath)
移动文件bool QFile::copy(const QString &fileName, const QString &newName)

通过这两个函数很简单就能写出递归复制文件夹及其内容的函数。

.cpp
bool PosService::CopyFolder(const QString &p_sUploadDate, QString p_sSourcePath, QString p_sTargetPath, QString &p_sMessage)
{
    m_PosRecord.hkLogForRun("文件复制","文件移动");
    QDir sourceDir(p_sSourcePath);
    //判断源文件夹是否存在,不存在则返回
    if(!sourceDir.exists())
    {
        p_sMessage = "移动文件夹出错:源文件夹" + p_sSourcePath + "不存在";
        return false;
    }
    //判断目标文件夹是否存在,没有则创建一个
    QDir targetDir(p_sTargetPath);
    if(!targetDir.exists())
    {
        if(!targetDir.mkpath(p_sTargetPath))
        {
            p_sMessage = "移动文件夹出错:目标文件夹" + p_sSourcePath + "创建失败";
            return false;
        }
    }
    //去掉.和..文件,..代表上一层,.代表当前,一般每个文件夹都会有这两个隐藏文件
    sourceDir.setFilter(QDir::NoDotAndDotDot | QDir::AllEntries);
    //获取该文件夹内所有文件除.和..以外
    QStringList sourceFileList = sourceDir.entryList();
    //遍历源文件夹列表
    for(auto& sourceFile : sourceFileList)
    {
        QFileInfo fileInfo(p_sSourcePath + sourceFile);
        if(!fileInfo.baseName().contains(p_sUploadDate))
        {
            continue;
        }
        //判断是否是文件
        if(fileInfo.isFile())
        {
            QFile file(p_sTargetPath + sourceFile);
            //如果文件重名则不执行拷贝
            if(!file.exists())
            {
                //没有则执行拷贝
                if(!QFile::copy(p_sSourcePath + sourceFile,p_sTargetPath + sourceFile)){
                    p_sMessage = "移动文件夹出错:源文件夹下文件" + p_sSourcePath + sourceFile + "向"
                            + p_sTargetPath + sourceFile + "拷贝时失败";
                    return false;
                }
            }
        }
        //判断是否是文件夹
        if(fileInfo.isDir())
        {
            //如果文件夹重名则不执行拷贝
            if(!targetDir.exists(targetDir.absolutePath() + "/" + sourceFile))
            {
                //如果不重复则执行拷贝文件
                if(!targetDir.mkdir(sourceFile))
                {
                    p_sMessage = "移动文件夹出错:文件夹" + p_sSourcePath + sourceFile + "向"
                            + p_sTargetPath + sourceFile + "拷贝时失败";
                    return false;
                }
            }
            //回调
            this->CopyFolder(p_sUploadDate, p_sSourcePath + sourceFile + "/",
                             p_sTargetPath + sourceFile + "/", p_sMessage);
        }
    }
    return true;
}

点赞、关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值