Qt递归拷贝和删除目录

QT之QDir文件目录拷贝、创建、删除 在开发过程中,需要用到文件的一些处理,例如文件夹的拷贝,文件夹删除或创建,文件的拷贝、删除等操作。Qt已经包含了这些操作,作为一个跨平台的开发工具,这些功能绝对会帮助你在跨平台开发中很方便。 Qt中QDir类实现了对文件夹和路径的处理,QFile类实现了对文件的处理。 1 文件夹创建 使用Qt的QDir来实现文件夹的创建。 QDir path; // 创建一个QDir变量 if (!path.exists("c:/test")) { // 使用QDir成员函数exists()来判断文件夹是否存在 pat 阅读详情

       最近在翻看项目代码时,看到了这两个函数,想到这个功能十分常用,因此拿出来与大家分享,希望对大家有用。几点说明:

1、记得当初写代码那会,是参考了网上的帖子写的,做了一点小修改。因此代码源于网络。

2、同时感谢原作者,只可惜当时没能记下原文网址,实在抱歉!刚才搜了一下,也没搜着,大家若发现原文出处,请跟帖提醒。谢谢!

3、到目前为止,代码在项目中测试、运行正常,大家若使用时发现Bug,请跟帖指出,我待验证后会及时修改更新。谢谢!

bool copyDir(const QString &source, const QString &destination, bool override)
{
    QDir directory(source);
    if (!directory.exists())
    {
        return false;
    }

    QString srcPath = QDir::toNativeSeparators(source);
    if (!srcPath.endsWith(QDir::separator()))
        srcPath += QDir::separator();
    QString dstPath = QDir::toNativeSeparators(destination);
    if (!dstPath.endsWith(QDir::separator()))
        dstPath += QDir::separator();

    bool error = false;
    QStringList fileNames = directory.entryList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);
    for (QStringList::size_type i=0; i != fileNames.size(); ++i)
    {
        QString fileName = fileNames.at(i);
        QString srcFilePath = srcPath + fileName;
        QString dstFilePath = dstPath + fileName;
        QFileInfo fileInfo(srcFilePath);
        if (fileInfo.isFile() || fileInfo.isSymLink())
        {
            if (override)
            {
                QFile::setPermissions(dstFilePath, QFile::WriteOwner);
            }
            QFile::copy(srcFilePath, dstFilePath);
        }
        else if (fileInfo.isDir())
        {
            QDir dstDir(dstFilePath);
            dstDir.mkpath(dstFilePath);
            if (!copyDir(srcFilePath, dstFilePath, override))
            {
                error = true;
            }
        }
    }

    return !error;
}


 QtCreator版本(在阅读 QtCreator 源码时,看到一个和以上功能一样的函数,想必像QtCreator这样的项目代码质量比我等程序员的代码质量更高。因此,特摘抄下来已做更新):

// taken from utils/fileutils.cpp. We can not use utils here since that depends app_version.h.
static bool copyRecursively(const QString &srcFilePath,
                            const QString &tgtFilePath)
{
    QFileInfo srcFileInfo(srcFilePath);
    if (srcFileInfo.isDir()) {
        QDir targetDir(tgtFilePath);
        targetDir.cdUp();
        if (!targetDir.mkdir(QFileInfo(tgtFilePath).fileName()))
            return false;
        QDir sourceDir(srcFilePath);
        QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System);
        foreach (const QString &fileName, fileNames) {
            const QString newSrcFilePath
                    = srcFilePath + QLatin1Char('/') + fileName;
            const QString newTgtFilePath
                    = tgtFilePath + QLatin1Char('/') + fileName;
            if (!copyRecursively(newSrcFilePath, newTgtFilePath))
                return false;
        }
    } else {
        if (!QFile::copy(srcFilePath, tgtFilePath))
            return false;
    }
    return true;
}


 

bool deleteDir(const QString &dirName)
{
    QDir directory(dirName);
    if (!directory.exists())
    {
        return true;
    }

    QString srcPath = QDir::toNativeSeparators(dirName);
    if (!srcPath.endsWith(QDir::separator()))
        srcPath += QDir::separator();

    QStringList fileNames = directory.entryList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);
    bool error = false;
    for (QStringList::size_type i=0; i != fileNames.size(); ++i)
    {
        QString filePath = srcPath + fileNames.at(i);
        QFileInfo fileInfo(filePath);
        if (fileInfo.isFile() || fileInfo.isSymLink())
        {
            QFile::setPermissions(filePath, QFile::WriteOwner);
            if (!QFile::remove(filePath))
            {
                qDebug() << "remove file" << filePath << " faild!";
                error = true;
            }
        }
        else if (fileInfo.isDir())
        {
            if (!deleteDir(filePath))
            {
                error = true;
            }
        }
    }

    if (!directory.rmdir(QDir::toNativeSeparators(directory.path())))
    {
        qDebug() << "remove dir" << directory.path() << " faild!";
        error = true;
    }

    return !error;
}

 

TeraTerm 使用技巧 ⏹TeraTerm 使用技巧 阅读详情

相关推荐

华为2019秋招笔试Java实现(2)

华为2019秋招笔试Java实现(2) 笔试日期2019年8月14日 第二题(200分) 题目描述 某程序员小A,有一种表格数据需要存储在文件中。表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串(字符串只包含数字、字母以及特殊字符!@#%^&*()",)。小A设计了一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中的一行数据。具体格式描述如下: 1、采用逗号分隔不同的字段(逗号前后无空格); 2、数字直接采用10进制的文本存储; 3、字符串的存储规则如下

hewhys的博客 1549

QDir::NoDotAndDotDot隐藏了所有的项目

http://blog.youkuaiyun.com/lutx/article/details/6603283 在使用QDir::entryInfoList函数对目录下的文件和子目录进行遍历时, 希望将Windows中的"."和".."目录忽略, 否则总是会将"."和".."也

luoluo90428的专栏 1061

手把手教你用STM32F103C8T6驱动HUB75 LED点阵屏(附74HC595级联代码)

本文详细介绍了如何使用STM32F103C8T6开发板驱动HUB75接口的LED点阵屏,包括硬件连接、74HC595级联代码、时序控制及灰度显示实现。通过实战案例展示动态文字显示和性能优化技巧,帮助开发者快速掌握LED点阵屏驱动技术。

weixin_42623010的博客 342

Qt实现对文件夹的遍历

遍历一个文件夹是我们用Qt非常常用的功能,Qt提供了非常好的接口,现在先写个简单的例子。 如何去遍历一个文件夹 如何实现对文件的过滤 如何实现对文件类型的过滤 如何对文件路径排序输出 QDir dir(&amp;amp;quot;C:/Users/st/Desktop&amp;amp;quot;); //要判断路径是否存在 if(!dir.exists()) { qDebug() &amp;amp;amp;lt;&amp;amp;

咸鱼的日常划水 7902

人形机器人专题:人形机器人关节,从Optimus选型看关节的发展

今天分享的是深度研究报告:《(报告出品方:中泰页。

GPT20236688的博客 3225

03、ZigBee 开发教程之进阶篇—CC2530无线传输质量检测

文章目录1、Packet Error Rate Tester(包错误率测试)理论分析1.1、工作流程1.2、流程图1.3、丢包、PER、RSSI计算方法2、实验详解2.1、实验目的2.2、实验设备2.3、实验现象2.4、源码分析2.5、实验步骤及现象 1、Packet Error Rate Tester(包错误率测试)理论分析 1.1、工作流程 Packet Error Rate Tester(包错误率测试) 1、启动 板载外设、射频IO、系统时钟、中断等初始化(halBoardInit();); Bas

嵌入式羊圈 1536

QDir(目录)

QDir 类提供对目录结构及其内容的访问,QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统,它也可以用来访问Qt的资源系统。Qt使用“/”作为通用目录分隔符,就像URL中的“/”用作路径分隔符一样。如果您始终使用“/”作为目录分隔符,Qt将翻译您的路径以符合底层操作系统。QDir 可以使用相对路径或绝对路径指向文件。绝对路径以目录分隔符开头(可以选择在 Windows 下以驱动器规范开头)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。exist()isEmpty()ma

qq_45303986的博客 4734

python爬虫:采集求职者简历信息并进行人才分析

通过 Python 爬虫抓取求职者简历信息并进行人才分析,可以帮助企业快速筛选和匹配人才。但在实施过程中,必须严格遵守法律法规,确保数据来源合法合规。如果需要更复杂的分析,可以结合自然语言处理(NLP)和机器学习技术,进一步挖掘数据价值。

数据知道的博客 1万+

Qt 之QDir文件目录拷贝、创建、删除 (***)

Qt 之QDir文件目录拷贝、创建、删除 (***

ken2232的博客 1299

DSI3接口介绍

DSI3(distributed system interface)分布式系统接口,是一种强大且通用的总线协议,旨在将多个遥感器和执行器互连到中央控制模块。在单总线中集成了电压信号、电流信号还有电源,甚至引用了3位状态机概念(反向数据),从逻辑0/1扩展到了0/1/2。

Airer_00的博客 4326

税务某局 webpack 登录接口逆向分析

我们再回到接口逻辑去看一下,发现每次请求前,还有两个接口,getpublickey和sendsm4,这里分析了一下调用逻辑,sm4这个接口用到一个参数是由publickey返回的一个参数而来,这个参数又经过内部加密处理,我们找到这个参数加密的地方,大概是在这个位置。我们还是顺着逻辑将加载器扣下来,然后用一个变量去接收,有了加载器,我们直接把加密代码扣下来做下处理,把一些用到的参数整理下如下。打上断点分析后,_utils_getuuid这个很长的变量也是加载器的一个函数,我们将这段代码也扣下来,如下。

码王吴彦祖的博客 402

Qt文件夹递归拷贝/删除

static bool copyRecursively(const QString &srcFilePath, const QString &tgtFilePath, bool coverFileIfExist = false) { QFileInfo srcFileInfo(srcFilePath); if (srcFileInfo.isDir()) {

Mr.Sugarcane 559

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

QT获取文件路劲下所有文件的文件名集合(包括子路径下的)

void MainWindow::getAllFileName(QString path, QVector<QString> &path_vec) { QDir *dir=new QDir(path); QStringList filter; QList<QFileInfo> *fileInfo=new QList<QFileInfo&...

瑾修的博客 1653

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

拷贝文件、文件夹、创建文件夹、删除文件夹操作

Qt拷贝文件、文件夹、创建文件夹、删除文件夹操作 [cpp] view plain copy /**   * @brief 拷贝文件到目的文件夹   * @param srcFileName 源文件全路径,比如  "F:/tx/wwxx.txt" ,"F:/tx/des/desd"   * @param desFilePathName 要C

草莓蛋糕人 350

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

基于QT的文件/目录拷贝设计

功能设计 1、实现文件拷贝函数 2、实现目录及子目录下所有文件的拷贝任务 3、文件/目录的删除 4、可获取拷贝进度 5、目标目录下同名文件进行比较,同一文件跳过,不同文件拷贝。 6、目标目录下多出的文件及目录自动删除 相关函数 void cp(QString src, QString dst); 例1: cp("./test1", "./test2"); 将test1(文件或目录)复制到 "/test2/test1", 若"/test2/test1"已存在,则会删除掉"/tes.

weixin_43777852的博客 634

QT文件和文件夹拷贝操作

if (fileInfo.isDir()) { // 当为目录时,递归的进行copy。else { //当允许覆盖操作时,将旧文件进行删除操作。dstDir.exists()) { //目的文件目录不存在则创建文件目录。QFile::exists(srcPath)) { //源文件不存在。//(源文件目录路劲,目的文件目录,文件存在是否覆盖)//(源文件文件路径,目的文件路径,文件存在是否覆盖)/// 进行文件copy。

yao51011010的专栏 1105

Qt----拷贝路径下的文件到另一个文件夹

1.方法一(这个方法还没测试) // taken from utils/fileutils.cpp. We can not use utils here since that depends app_version.h. bool copyRecursively(const QString &srcFilePath, const ...

github_35960067的博客 5289

Qt之文件夹下的所有文件拷贝,包括子目录

一、文件拷贝(不包含父目录) bool CopyDirectoryFiles(const QString &fromDir,const QString &toDir) { QDir sourceDir(fromDir); QDir targetDir(toDir); if(!targetDir.exists()) { if(!targetDir.mkdir(targetDir.absolutePath())) {

小胡子_0214 3573

[QT] 删除指定目录下特定文件,拷贝文件到其他路径

一、获取文件夹下文件 //startDir 文件路径 //m_filters 后缀列表 //_isParent true当前目录,false当前目录 QStringList DeleteFile::findFiles(const QString &startDir, QStringList filters, bool _isParent) { //m_filters << "*.pdb" << "*.exp" << "*.db" << "*.log

qq_44513198的博客 2038

qt中拷贝文件和文件夹

qt中拷贝文件和文件夹

chqaz123的博客 8389

Qt 文件夹拷贝

Qt 文件夹拷贝

null_plus的博客 855

QT-实现拷贝文件、文件夹(QFile::copy)

QT-实现拷贝文件、文件夹(QFile::copy)

weixin_45590571的博客 9356

Qt 文件拷贝 文件夹删除

CopyFileToPath(QString sourceDir, QString toDir, bool coverFileExist) { /*-----sourceDir目标文件路径 如"C:/text.txt" *-----toDir目标文件复制的位置 如"D:/text.txt" 表示将c盘根目录下的tetx.txt拷到D盘根目录下以text.txt命名 *-----如果D盘根目录

Ryan的博客 1362
上一篇: Java第2课 eclipse的使用
下一篇: 代码是债务,越少越好
e5Max
博客等级 码龄14年 145粉丝 129原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值