打开一个目录, 将一个目录下的所有文件和子目录下的所有文件循环递归拷贝到目标目录,如U盘目录(在U盘创建目录)。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QFileDialog>
#include <QDir>
#include <QMessageBox>
#include <QDebug>
#include <QStorageInfo>
#include <QFileInfo>
#include <QLoggingCategory>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();bool SubDirCopy(QDir& _srcDir, QDir& _dstDir);
private slots:void on_BrowseButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QLoggingCategory::defaultCategory()->setEnabled(QtDebugMsg, true);
}MainWindow::~MainWindow()
{delete ui;
}bool MainWindow::SubDirCopy(QDir &_srcDir, QDir &_dstDir)
{QFileInfoList fileList = _srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);if(fileList.size() == 0)return false;int actualCount = 0;foreach(QFileInfo filter, fileList){if(filter.isFile()){QString filepath;filepath = _dstDir.absolutePath() + "/" +filter.fileName();QFile file(filepath);if(file.exists()){file.remove();}QFile newFile(filter.absoluteFilePath());if(newFile.copy(filepath)){ui->textBrowser->append(filepath);actualCount++;}}else if(filter.isDir()){QString filepath;filepath = _dstDir.absolutePath() + "/" +filter.fileName();QDir dstDir(filepath);QDir subDir(_dstDir.absolutePath());if(!dstDir.exists() && !subDir.mkdir(filter.baseName())){QMessageBox::warning(this, tr("提示"), tr("目录创建失败"));return false;}//dstDir.setPath(filepath);dstDir.cd(filepath);QDir subSrc(filter.absoluteFilePath());SubDirCopy(subSrc, dstDir);actualCount++;dstDir.cdUp();}}if(actualCount < fileList.size()){qDebug()<<"sub dir Count = "<<actualCount;}else{qDebug()<<"sub dir copy OK.";}return true;
}void MainWindow::on_BrowseButton_clicked()
{QDir targetDir;QString fileName = QFileDialog::getExistingDirectory(this, tr("Open Input Directory"), QDir::currentPath());QDir srcDir(fileName);if(srcDir.exists()){ui->InputEdit->setText(fileName);}QString udiskpath = "/media/one/";QDir udiskDir(udiskpath);QFileInfoList entry = udiskDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files);if(entry.size() < 1){QMessageBox::warning(this, tr("提示"), tr("未识别到可移动设备"));return;}for(QFileInfo & x : entry){if(x.isDir() && x.isWritable()){QString target = x.absoluteFilePath() + "/target/";QDir _tmpDir(target);if(!_tmpDir.exists() && !targetDir.mkpath(target)){QMessageBox::warning(this, tr("提示"), tr("目录创建失败"));return;}targetDir.setPath(target);break;}}if(targetDir.exists()){QFileInfoList fileList = srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);int actualCount = 0;foreach(QFileInfo filter, fileList){if(filter.isFile()){QString filepath;filepath = targetDir.absolutePath() + "/" +filter.fileName();QFile file(filepath);if(file.exists()){file.remove();}QFile newFile(filter.absoluteFilePath());if(newFile.copy(filepath)){ui->textBrowser->append(filepath);actualCount++;}}else if(filter.isDir()){QString filepath;filepath = targetDir.absolutePath() + "/" +filter.fileName();QDir dstDir(filepath);QDir subDir(targetDir.absolutePath());if(!dstDir.exists() && !subDir.mkdir(filter.baseName())){QMessageBox::warning(this, tr("提示"), tr("目录创建失败"));return;}//dstDir.setPath(filepath);dstDir.cd(filepath);QDir subSrc(filter.absoluteFilePath());SubDirCopy(subSrc, dstDir);dstDir.cdUp();actualCount++;}}if(actualCount < fileList.size()){QMessageBox::warning(this, tr("提示"), tr("磁盘空间不足"));}else{QMessageBox::warning(this, tr("提示"), tr("文件拷贝成功"));}qDebug()<<"TotalCount = "<<fileList.size();}
}

Qt实现文件拷贝递归实现相关推荐

  1. 远程服务器的url怎么配置文件,Linux常用命令(5)--SSH访问远程服务器、SCP服务器间文件拷贝...

    一.使用"ssh"命令,登录访问远程服务器 Linux是一个支持多用户操作的系统,在同一时刻允许多个用户同时访问系统,共享系统提供的服务.那么用户如何从不同的机器上访问同一台Lin ...

  2. linux c语言文件拷贝_linux - 远程拷贝文件之scp

    简介 scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证. scp只要通过sshd服务进行通讯,而且要求两端都有sc ...

  3. linux c语言文件拷贝_linux - scp命令远程文件拷贝

    简介 scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证. scp只要通过sshd服务进行通讯,而且要求两端都有sc ...

  4. Linux(CentOS)挂载U盘、移动硬盘以及文件拷贝、备份

    说明: 环境:VMware workstation  系统:centos6.2 以下操作均在root下执行的 1.U盘挂载 mkdir /mnt/usb  //创建一个目录,用于挂载U盘 fdisk ...

  5. qt 移动文件夹到另一目录下

    qt 移动文件夹到另一目录下 #include <QDir>//删除文件夹 bool delDir(const QString &path) {if (path.isEmpty() ...

  6. linux中的文件夹压缩文件,linux将文件拷贝到目录下Linux下文件的压缩与打包详解...

    在Linux中,有很多的压缩命令.利用这些压缩命令,可以方便的从网络上下载大型的文件.同时,我们知道,Linux文件的扩展名是没有特殊意义的,不过,因为Linux下存在着许多压缩命令,所以为了方便记忆 ...

  7. linux Qt 复制文件至剪切板

    转载:linux Qt 复制文件至剪切板 文中提到的  两种mime type  同时设定那块, 当拷贝文本的时候能看到data->formats 里面没有 text/uri-list 和 x- ...

  8. 移动硬盘拷贝linux文件,Linux(CentOS)挂载U盘、移动硬盘以及文件拷贝、备份

    1.U盘挂载 mkdir /mnt/usb  //创建一个目录,用于挂载U盘fdisk -l   //查看系统中挂载的U盘,若系统有一块硬盘sdb1 代表你的U盘,/dev/sdb1表明机器已识别U盘 ...

  9. python list 平均值_python list 最大值和平均值Python基础 - 文件拷贝

    最近在备份手机上的照片的时候,纯手工操作觉得有些麻烦,就想写个脚本自动进行.因为备份的时候有些照片以前备份过了,所以需要有个判重操作. 主要功能在copyFiles()函数里实现,如下: 电脑技术网认 ...

最新文章

  1. python逐个读取文件并处理_逐个读取多个文件并用python进行处理
  2. Java反射得到属性的值和设置属性的值
  3. android适配右到左布局注意事项
  4. 联想拯救者y空间兑换代码_锐祥贴片Y电容进入联想手机快充供应链,性能获世界500强认可...
  5. JavaScript数组迭代方法(图解)
  6. [C++11]lambda表达式语法
  7. 【Flink】Flink 部分算子是 FinishSHED 不做checnpoint
  8. 湖南师大计算机学信网,湖南师范大学有计算机专业硕士吗?
  9. 【小超_Android】GitHub源码项目整理,希望对大家有帮助
  10. Linux的history命令
  11. 谈谈互动型网站中垃圾贴的应对方案,互联网营销
  12. 儿童节特刊 | 如何练好手眼协调能力(手眼标定详解,附源码)
  13. js基础-点击切换div背景颜色
  14. ##免费的标准股票交易接口封装与实盘使用
  15. Flask的大型网站模板
  16. 电脑重装系统后在Win11控制面板怎么打开?
  17. 关于CSS选择器的权重计算
  18. Linux中的ps命令详解
  19. TM1652控制-2
  20. MSP430单片机串口控制5路PWM频率变化程序

热门文章

  1. 15秒正能量视频制作技巧
  2. [面试] C++中的static关键字 (static 上镜率非常高!)
  3. java循环有哪四要素_java-循环
  4. 挖掘城市ip_用文化创意挖掘城市文脉,“哈舅”助力打造城市文化IP
  5. Java小白画图板的重绘包括谢尔宾斯基三角形和蕨类图像的重绘
  6. 【初试第一】23考研一战上岸上海交大819经验分享
  7. java+vue家政公司服务预约网站系统springboot+vue
  8. Sofia-SIP辅助文档十六 - Sofia SIP用户代理库 - msg - 消息解析模块
  9. i7 12700K配什么主板 i7 12700k配什么显卡
  10. 性价比一流的颜值实力派 荣耀畅玩8C上手体验