11、Qt:创建/删除文件夹、拷贝文件

一、创建文件夹

声明:
bool createPath(QString strPath); 定义:
/**
* @brief MainWindow::CreatePath 创建文件夹
* @param strPath 要创建的文件夹路径
* @return 创建成功返回true,失败返回false
*/
bool MainWindow::createPath(QString strPath)
{QDir dir;bool bExist = dir.exists(strPath);if(!bExist) //如果文件夹不存在{return dir.mkpath(strPath); //创建文件夹}return true;
}

二、删除当前目录及其下所有文件

声明:
bool deleteDir(QString strPath); 定义:
/**
* @brief MainWindow::deleteDir 删除当前目录及其下所有文件
* @param strPath 要删除的文件夹路径
* @return 删除成功返回true,失败返回false
*/
bool MainWindow::deleteDir(QString strPath)
{if(strPath.isEmpty()){return false;}QDir dir(strPath);if(!dir.exists()) //不是文件夹{return true;}//删除当前目录及其下所有文件return dir.removeRecursively();
}

三、把文件拷贝到指定路径中

声明:
bool copyFileToPath(QString oldFile, QString newPath, bool isDelete = true); 定义:
/**
* @brief MainWindow::copyFileToPath 把文件拷贝到指定路径中
* @param oldFile 要拷贝的文件
* @param newPath 目标路径
* @param isDelete 当目标路径中有同名文件时,是否删除,重新拷贝
* @return 拷贝成功返回true,失败返回false
*/
bool MainWindow::copyFileToPath(QString oldFile, QString newPath, bool isDelete)
{newPath.replace("\\", "/");QFileInfo fiSrc(oldFile);if(fiSrc.absoluteFilePath() == newPath) //文件的源路径与目标路径一样时,不需要再拷贝了{return true;}if(!createPath(newPath)) //创建文件夹失败{return false;}//判断newPath最后一个字符是否为"/"QString strNewFile; //新文件的路径加名称if(newPath.at(newPath.size()-1) == "/"){strNewFile = newPath + fiSrc.fileName();}else{strNewFile = newPath + "/" + fiSrc.fileName();}//判断文件是否存在QFile fiNew(strNewFile);if(fiNew.exists()){if(isDelete) //删除原有文件{fiNew.remove();}else{return true;}}//文件拷贝if(!QFile::copy(oldFile, strNewFile)){QString str = "拷贝文件失败:" + oldFile + "->" + strNewFile;qCritical() << str;deleteDir(newPath);return false;}return true;
}

四、获取文件夹下的文件

声明:
bool findFile(QString path, QVector<QString> &fileNames, QString strSuffix = ""); 
定义:
/**
* @brief MainWindow::findFile 获取文件夹下的文件
* @param path 文件夹路径
* @param fileNames 文件集合
* @param strSuffix 文件后缀,只有指定后缀的文件,如.txt
* @return 获取成功返回true,失败返回false
*/
bool MainWindow::findFile(QString path, QVector<QString>& fileNames, QString strSuffix)
{QDir dir(path);if(!dir.exists()) //文件夹不存在{return false;}//获取filePath下所有文件夹和文件dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);//文件夹|文件|不包含./和..///排序文件夹优先dir.setSorting(QDir::DirsFirst);//获取文件夹下所有文件(文件夹+文件)QFileInfoList list = dir.entryInfoList();if(list.size() == 0) //没有文件{return false;}//遍历for(int i = 0; i < list.size(); i++){QFileInfo fileInfo = list.at(i);if(fileInfo.isDir())//判断是否为文件夹{findFile(fileInfo.filePath(), fileNames, strSuffix); //递归开始}else{if(strSuffix == ""){fileNames.push_back(list.at(i).filePath()); //保存全部文件路径+文件名}else if(fileInfo.suffix() == strSuffix) //设定后缀{fileNames.push_back(list.at(i).filePath()); //保存全部文件路径+文件名}}}return true;
}

五、将源路径下所有文件拷贝到目的路径

声明:
bool CopyPathFileToPath(QString oldPath, QString newPath, bool isDelete = true); 定义:
/**
* @brief MainWindow::CopyPathFileToPath 将源路径下所有文件拷贝到目的路径
* @param oldPath 源路径
* @param newPath 目的路径
* @param bCoverFileIfExist 当目标路径中有同名文件时,是否删除,重新拷贝
* @return 拷贝成功返回true,失败返回false
*/
bool MainWindow::CopyPathFileToPath(QString oldPath, QString newPath, bool isDelete)
{newPath.replace("\\", "/");QVector<QString> vFileNames;if(!findFile(oldPath, vFileNames)){return false;}//oldPath中最后一个文件夹名 赋值给 newPathQString strName = oldPath.split("/").last();if(newPath.at(newPath.size()-1) == "/"){newPath = newPath + strName;}else{newPath = newPath + "/" + strName;}for(int i = 0; i < vFileNames.size(); ++i){QString strPath = vFileNames.at(i);QString strTempDir = strPath.mid(oldPath.size());int nNamePos = strTempDir.lastIndexOf("/");QString strTempPath = strTempDir.left(nNamePos+1);QString strNewPath = newPath + strTempPath;if(!copyFileToPath(strPath, strNewPath, isDelete))  //拷贝失败{deleteDir(newPath);return false;}}return true;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章概括!状态码分别是什么意思?

hello,我是小索奇&#xff0c;HTTP状态码被分为几个类别&#xff0c;每个类别代表着不同类型的响应。这里是100到500之间的状态码的大致含义&#xff1a; 1xx (信息性状态码) 100 Continue: 客户端应继续其请求。101 Switching Protocols: 请求者已要求服务器切换协议&#x…

速通Python基础语法--语句篇

缩进和代码块 一 条件语句if/elif if的基本语法 示例 条件语句嵌套 练习1 练习2 二 空语句 三 while循环 示例 打印1-10 求1-100的和 求5! 求1-5的阶乘之和 四 for循环 for的基本语法 1~range[ ,) 五 continue/break continue:结束当前循环,继续下一次循环 break:结束整个循…

《每天一分钟学习C语言·四》文本读写操作及二进制读写

fopen(参数1,参数2)&#xff0c;第一个参数是要打开的文件名&#xff0c;文件名字符串&#xff0c;第二个参数用于制定文件打开模式的一个字符串。 注&#xff1a;如果要打开某个盘的文本如F盘test文件夹下的test.txt文本&#xff0c;则fopen(“F:\test\test.txt”,”r”); 程序…

AcWing算法进阶课-1.1.2Dinic/ISAP求最大流

算法进阶课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 给定一个包含 n n n 个点 m m m 条边的有向图&#xff0c;并给定每条边的容量&#xff0c;边的容量非负。 图中可能存在重边和自环。求从点 S S S 到点 T T T 的最大流。 输入格式 第一行包…

本地websocket服务端结合cpolar内网穿透实现公网访问

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

黑马头条--day07--app文章搜索

目录 一.安装elasticsearch 1.拉取镜像 2.创建存放数据及配置文件的文件夹&#xff0c;启动时挂载。 4.修改文件夹权限 5.启动容器 5.1参数解释 6.安装ik分词器 6.2测试一下Ik分词器 二.添加文章索引库 1查询所有的文章信息&#xff0c;批量导入到es索引库中 2)测试 …

深度盘点:除了BRC20外 这些公链潜力铭文也值得关注

近日的铭文市场风起云涌&#xff0c;除BRC20占据着市场70%以上的份额外&#xff0c;其他公链的铭文也在快速发展

Spring Boot + EasyUI 全屏布局(二)

一、创建一个Spring Boot EasyUI项目 Spring Boot EasyUI 创建第一个项目&#xff08;一&#xff09;_springboot整合easyui-CSDN博客 二、相关知识点总结 布局&#xff08;layout&#xff09;是有五个区域&#xff08;北区 north、南区 south、东区 east、西区 west 和中区…

C++ 如何使用对二维vector进行读和写

要使用二维vector进行读和写&#xff0c;可以通过两层循环来遍历每个元素。下面是一个简单的示例代码&#xff1a; #include <iostream> #include <vector>int main() {// 创建一个二维vectorstd::vector<std::vector<int>> matrix {{1, 2, 3},{4, 5…

Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第十三章、拦截器 拦截器 &#xff1a;Interceptor 拦截 中断 类似于javaweb中的Filter&#xff0c;不过没有Filter那么强大 作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦…

typeScript安装及TypeScript tsc 不是内部或外部命令,也不是可运行的程序或批处理文件解决办法

一、typeScript安装&#xff1a; # 全局安装 TypeScript npm i -g typescript 二、检查是否安装成功ts&#xff1a; #检查ts的版本号 确定是否安装成功 tsc -v出现报错&#xff1a;‘tsc’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 解决&#xff1…

fastGitHub工具推荐(如果打不开github或者使用很慢可以使用该工具)

目录 一&#xff0c;针对问题二&#xff0c;下载1&#xff0c;github里面下载FastGitHub2&#xff0c;博客上传了下载资源 三&#xff0c;安装使用点击执行文件即可 一&#xff0c;针对问题 当使用github很慢&#xff0c;或者根本打不开的时候&#xff0c;就可以使用该工具 …

Java基础知识复习

目录 一、Java语言基础知识&#xff0c;包括面向对象编程、语法特性等 0、什么是面向对象编程&#xff1f; 1、基本语法&#xff1a; 2、变量和数据类型&#xff1a; 3、运算符和表达式&#xff1a; 4、控制结构&#xff1a; 5、函数和方法&#xff1a; 6、类和对象&#xff1a…

python3+selenium 切换窗口方法

第一种&#xff1a; 使用场景&#xff1a; 打开多个窗口&#xff0c;需要定位到新打开的窗口 使用方法&#xff1a; # 获取打开的多个窗口句柄 windows driver.window_handles # 切换到当前最新打开的窗口 driver.switch_to.window(windows[-1]) 举例说明&#xff1a;# _._ …

电商数仓项目----笔记五(数仓架构和建模)

ODS&#xff1a;数据源 DWD&#xff1a;加工数据 DWS&#xff1a;统计数据 ADS&#xff1a;分析数据 DIM&#xff1a; 维度层&#xff08;大家都有可能用得上的部分&#xff09; ER模型 数据仓库之父Bill Inmon提出的建模方法是从全企业的…

如何使用jenkins、ant、selenium、testng搭建自动化测试框架

如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入&#xff0c;然后写一些测试脚本&#xff0c;这就是你所说的自动化测试&#xff0c;其实这个还不能算是真正的自动化测试&#xff0c;你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗&#xff…

Ubuntu 常用命令之 unzip 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 unzip命令在Ubuntu系统中用于解压缩.zip文件。它可以解压缩一个或多个.zip文件&#xff0c;并将文件解压缩到当前目录或指定的目录。 unzip命令的一般格式 unzip [选项] zipfile [file...]其中&#xff0c;zipfile是要解压的.zi…

三种方式简单搭建http本地文件服务

有时候想写一个简单的html文件&#xff0c;然后加上一些image、js、css文件用于测试。希望有一个简单的http服务&#xff0c;总结了如下三种方式&#xff0c;欢迎讨论更多高效的方式。 &#xff08;一&#xff09;使用Web Server for Chrome浏览器扩展 之前写过一篇博文&#x…

顺序表(C语言版)

顺序表是一种基于数组实现的线性表&#xff0c;它的特点是随机存储&#xff0c;可以随机访问任意位置的元素。以下是一个简单的顺序表的实现&#xff08;C语言版&#xff09;。 #include <stdio.h> #include <stdlib.h>#define MAXSIZE 100 // 最大容量typedef st…

uniapp uview 页面多个select组件回显处理,默认选中

<view class"add-item column space-around" click"selectClick(1)"><text class"w-s-color-3 f-28">商品分类</text><view class"w-100 space-between"><!-- 第一个参数为你的单选数组&#xff0c;第二个…