Qt复制文件和文件夹

参考别人的复制文件和复制文件夹,将他们合并成一个函数

  • 功能: 文件拷贝
  • 输入: fromDir源路径,toDir目标路径
  • fromDir是文件或者是文件夹,toDir可以是文件夹也可以是文件
bool QWidget::copyDirectoryFiles(const QString &fromDir, const QString &toDir)
{

  QFileInfo fromDirInfo(fromDir);
    QFileInfo toDirInfo(toDir);
    QDir sourceDir( fromDir );//源路径
    QDir targetDir( toDir );//目标路径
    if(fromDir == toDir)
        return false;
    if(!fromDirInfo.exists())//源文件不存在返回
        return false;

    if(toDirInfo.isFile())//不是目录
    {
        QString strname = toDirInfo.fileName();
        QString dir = toDir;
        dir.remove(strname);
        targetDir.setPath(dir);
    }

    if(fromDirInfo.isFile())//复制文件
    {
        QString CopyName = targetDir.filePath(fromDirInfo.fileName());//将复制的文件名加在目标路径中

        if(targetDir.exists(fromDirInfo.fileName()))//判断文件是否存在
        {
            targetDir.remove(fromDirInfo.fileName());
        }
        if(!QFile::copy(fromDir,CopyName))
        {
            return false;
        }

    }
    else//复制文件夹
    {
        QString addpath = targetDir.absolutePath() + "/" + fromDirInfo.fileName();
        targetDir.setPath(addpath);

        if(!targetDir.exists())//如果目标目录不存在
        {
            if(!targetDir.mkdir(addpath))//进行创建
                return false;
        }
         QFileInfoList fileInfoList = sourceDir.entryInfoList();
         foreach(QFileInfo fileInfo,fileInfoList)
         {
             if ( fileInfo.fileName() == "." || fileInfo.fileName() == ".." )
                continue;
             if(fileInfo.isFile())
             {
                 QString Name = targetDir.filePath(fileInfo.fileName());
                 if(targetDir.exists(fileInfo.fileName()))//判断文件是否存在
                 {
                     targetDir.remove(fileInfo.fileName());
                 }
                 if ( !QFile::copy(fileInfo.filePath(),Name))
                 {
                     return false;
                 }
             }
             else
             {
                 if(!copyDirectoryFiles(fileInfo.filePath(),
                                        targetDir.absolutePath()))
                 {
                     return false;
                 }
             }
         }
    }
    return true;
}

上述代码供参考,如有问题请告知!

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,可以使用QFile和QDir两个类来实现将一个文件复制文件夹中的功能。 首先,我们需要创建一个QFile对象来表示要复制的源文件,以及一个QDir对象来表示目标文件夹。然后,使用QFile的copy()函数将源文件复制到目标文件夹中。 下面是一个具体的代码示例: ```cpp QString sourceFilePath = "/path/to/source/file.txt"; // 源文件路径 QString destinationFolderPath = "/path/to/destination/folder"; // 目标文件夹路径 QFile sourceFile(sourceFilePath); QDir destinationFolder(destinationFolderPath); // 检查源文件和目标文件夹是否存在 if (sourceFile.exists() && destinationFolder.exists()) { // 获取源文件名 QString fileName = sourceFile.fileName(); // 拼接目标文件路径 QString destinationFilePath = destinationFolderPath + "/" + fileName; // 复制文件 if (sourceFile.copy(destinationFilePath)) { qDebug() << "文件复制成功!"; } else { qDebug() << "文件复制失败!"; } } else { qDebug() << "源文件或目标文件夹不存在!"; } ``` 在这个示例中,我们首先创建了QFile和QDir对象,然后检查源文件和目标文件夹是否存在。如果存在,就通过拼接目标文件路径来复制文件复制成功后,会输出"文件复制成功!";如果复制失败或源文件或目标文件夹不存在,会相应地输出相应的提示信息。 这是一个基本的示例,你可以根据实际需求做进一步的适应或扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值