Qt判断文件夹路径、文件是否存在不存在则创建

Qt判断文件夹路径、文件是否存在不存在则创建

  • Chapter1 Qt判断文件夹路径、文件是否存在不存在则创建
    • Qt判断文件夹/目录是否存在
    • Qt判断文件是否存在
  • Chapter2 Qt 判断文件或文件夹是否存在及创建文件夹
    • 1. 判断文件夹是不是存在
    • 2. 判断文件是不是存在
    • 3、判断文件或文件夹是不是存在(即不确定字符串是文件还是文件夹路径)
    • 4、判断文件夹是否存在,不存在则创建
    • 5、以下为摘录的其他网络测试代码


Chapter1 Qt判断文件夹路径、文件是否存在不存在则创建

原文链接:https://blog.csdn.net/yao_hou/article/details/121389476

Qt判断文件夹/目录是否存在

Qt判断文件夹/目录是否存在,可以使用QDir类的exists方法来判断,在使用时需要包含头文件#include <QDir>,例如下面的代码:

#include <QCoreApplication>
#include <QDir>
#include <QDebug>///
/// \brief 判断文件夹是否存在,不存在则创建
/// \param fullPath
/// \return
///
bool DirExist(QString fullPath)
{QDir dir(fullPath);if(dir.exists()){//存在当前文件夹return true;}else{//不存在则创建bool ok = dir.mkdir(fullPath); //只创建一级子目录,即必须保证上级目录存在return ok;}
}///
/// \brief 判断文件夹是否存在,不存在则创建, 可创建多级目录
/// \param fullPath
/// \return
///
bool DirExistEx(QString fullPath)
{QDir dir(fullPath);if(dir.exists()){return true;}else{//不存在当前目录,创建,可创建多级目录bool ok = dir.mkpath(fullPath);return ok;}
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);bool isOk = DirExist("D:/1234");qDebug() << isOk;isOk = DirExistEx("D:/1/2/3");qDebug() << isOk;return a.exec();
}
  • DirExist函数,判断文件夹是否存在,不存在则创建
  • DirExistEx函数,判断文件夹是否存在,不存在则创建, 可创建多级目录

二者的区别是创建文件夹调用的方法不同

  • QDir mkdir :创建一个目录(文件夹/路径)
  • QDir mkpath : 创建多级目录

Qt判断文件是否存在

代码如下:

#include <QCoreApplication>
#include <QFile>
#include <QDebug>///
/// \brief 判断文件是否存在,不存在则创建该文件
/// \param fullFileName
/// \return
///
bool FileExist(QString fullFileName)
{QFile file(fullFileName);if(file.exists()){return true;}else{qDebug() << u8"文件不存在, 那就新建该文件";file.open( QIODevice::ReadWrite | QIODevice::Text );//注意关闭文件file.close();}return false;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);bool isOk = FileExist("D:/1234567.ini");  //Text类型可以创建txt,ini,json,xml等qDebug() << isOk;return a.exec();
}

当文件不存在时,调用QFile的open方法也就是相当于创建了一个文件。

Chapter2 Qt 判断文件或文件夹是否存在及创建文件夹

原文链接:https://blog.csdn.net/lusirking/article/details/51644782

1. 判断文件夹是不是存在

参数说明:

QString fullPath;//文件夹全路径
/*方法1*/
bool isDirExist(QString fullPath)
{QDir dir(fullPath);if(dir.exists()){return true;}return false;
}
/*方法2*/
bool isDirExist(QString fullPath)
{QFileInfo fileInfo(fullPath);if(fileInfo.isDir()){return true;}return false;
}

2. 判断文件是不是存在

参数说明:

QString fullFileName;//文件全路径(包含文件名)
/*方法1*/
bool isFileExist(QString fullFileName)
{QFileInfo fileInfo(fileFullName);if(fileInfo.isFile()){return true;}return false;
}

3、判断文件或文件夹是不是存在(即不确定字符串是文件还是文件夹路径)

参数说明:

QString fullFilePath;//路径名
/*方法1*/
bool isFileExist(QString fullFilePath)
{QFileInfo fileInfo(fullFilePath);if(fileInfo.exists()){return true;}return false;
}
/*方法2*/
bool isFileExist(QString fullFilePath)
{QFile file(fullFilePath);if(file.exists()){return true;}return false;
}

4、判断文件夹是否存在,不存在则创建

/*方法1*/
bool isDirExist(QString fullPath)
{QDir dir(fullPath);if(dir.exists()){return true;}else{bool ok = dir.mkdir(fullPath);//只创建一级子目录,即必须保证上级目录存在return ok;}
}
/*方法1*/
bool isDirExist(QString fullPath)
{QDir dir(fullPath);if(dir.exists()){return true;}else{bool ok = dir.mkpath(fullPath);//创建多级目录return ok;}
}

5、以下为摘录的其他网络测试代码

{QFileInfo fi("C:/123");                     // 目录存在qDebug() << fi.isFile();                    // falseqDebug() << fi.isDir();                     // trueqDebug() << fi.exists();                    // trueqDebug() << fi.isRoot();                    // falseqDebug() << QFile::exists("C:/123");        // trueqDebug() << QDir("C:/123").exists();        // truefi.setFile("C:/ABC");                       // 目录不存在qDebug() << fi.isFile();                    // falseqDebug() << fi.isDir();                     // falseqDebug() << fi.exists();                    // falseqDebug() << fi.isRoot();                    // falseqDebug() << QFile::exists("C:/ABC");        // falseqDebug() << QDir("C:/ABC").exists();        // falsefi.setFile("C:/");                          // 存在的驱动器qDebug() << fi.isFile();                    // falseqDebug() << fi.isDir();                     // trueqDebug() << fi.exists();                    // trueqDebug() << fi.isRoot();                    // trueqDebug() << QFile::exists("C:/");           // trueqDebug() << QDir("C:/").exists();           // truefi.setFile("Z:/");                          // 不存在的驱动器qDebug() << fi.isFile();                    // falseqDebug() << fi.isDir();                     // falseqDebug() << fi.exists();                    // falseqDebug() << fi.isRoot();                    // falseqDebug() << QFile::exists("Z:/");           // falseqDebug() << QDir("Z:/").exists();           // falsefi.setFile("C:/123.lnk");                   // 快捷方式存在且指向的文件也存在qDebug() << fi.isFile();                    // trueqDebug() << fi.isDir();                     // falseqDebug() << fi.exists();                    // trueqDebug() << fi.isRoot();                    // falseqDebug() << QFile::exists("C:/123.lnk");    // trueqDebug() << QDir("C:/123.lnk").exists();    // falsefi.setFile("C:/456.lnk");                   // 快捷方式存在但指向的文件不存在qDebug() << fi.isFile();                    // falseqDebug() << fi.isDir();                     // falseqDebug() << fi.exists();                    // falseqDebug() << fi.isRoot();                    // falseqDebug() << QFile::exists("C:/456.lnk");    // falseqDebug() << QDir("C:/456.lnk").exists();    // false
}

可以看到,容易让人感到混乱的是exists方法,这个方法是通用的判断方法,可以看成是这样的表达式
exists() == (isFile() || isDir())

也就是说判断文件或文件夹是否存在单纯用exists方法是不严谨的
比如你的本意是判断文件是否存在,但文件不存在,而恰巧有个同名的文件夹,那么exists也会返回true。文件夹也是同理

根据上面的代码作出的一点总结

准确判断文件是否存在

1.用QFileInfo::isFile()方法

准确判断文件夹是否存在

1.用QFileInfo::isDir()方法
2.用QDir::exists()方法

不确定字符串是文件还是文件夹路径

1.用QFileInfo::exists()方法
2.用QFile::exists()方法

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

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

相关文章

C. Medium Design Codeforces Round 904 (Div. 2)

Problem - C - Codeforces 题目大意&#xff1a;有一个长为m的数组初始全为0&#xff0c;有n个区间[li,ri]&#xff0c;每选择一个区间就要令区间内所有数1&#xff0c;要求选择一些区间&#xff0c;使得数组的最大值-最小值最大&#xff0c;求这个差值 1<n<1e5;1<m…

初始Redis 分布式结构的发展演变

目录 Redis的特点和使用场景 分布式系统的引入 单机系统 分布式系统 应用服务器的增多&#xff08;处理更多的请求&#xff09; 数据库读写分离&#xff08;数据服务器的增多) 引入缓存 应对更大的数据量 业务拆分&#xff1a;微服务 Redis的特点和使用场景 我们先来…

Andriod学习笔记(二)

页面设计的零碎知识 通用属性设置文本大小设置视图宽高设置视图的对齐方式 页面布局LinearLayoutRelativeLayoutGridLayoutScollView 按钮触控ButtonImageViewImageButton 通用属性 设置文本大小 纯数字的setTextSize方法&#xff0c;内部默认字体单位为sp&#xff0c;sp是An…

JWT——jjwt使用

文章目录 一、JWT是什么&#xff1f;二、JWT构成0、header.payload.signature1、header 头部 (JSON数据&#xff0c;Base64加密)2、payload 载荷 (JSON数据&#xff0c;Base64加密)2.1、Public claims(公共的声明)2.2、Private claims(私人声明)2.3 注意: 3、signature 签名&am…

第六十五章 符号概览

文章目录 第六十五章 符号概览其他形式abcdef{"abc":(def),"abc":(def),"abc":(def)}{abcdef}{%%CLASSNAME}&sql(xxx)[abcdef,abcdef,abcdef]*abcdef?abcdefabcdef 第六十五章 符号概览 其他形式 abcdef ^abcdef "abcdef" 这…

YOLOv7-PTQ量化部署

目录 前言一、PTQ量化浅析二、YOLOv7模型训练1. 项目的克隆和必要的环境依赖1.1 项目的克隆1.2 项目代码结构整体介绍1.3 环境安装 2. 数据集和预训练权重的准备2.1 数据集2.2 预训练权重准备 3. 训练模型3.1 修改模型配置文件3.2 修改数据配置文件3.3 训练模型3.4 mAP测试 三、…

[Spring] SpringBoot2 简介(一)—— 基础配置

目录 一、SpringBoot 简介 1、Spring 的缺点 2、SpringBoot 功能 二、SpringBoot 入门案例 1、实现步骤 2、访问服务器 3、入门小结 4、Idea 快速构建 SpringBoot 工程 5、起步依赖无需版本号 6、主启动类的在项目中的位置&#xff08;*重要*&#xff09; 三、Sprin…

【小白专用 已验证】PHP连接SQLServer数据库

PHP是一门强大的服务器端脚本语言&#xff0c;而SQL Server是Microsoft开发的一款关系型数据库管理系统。为了在PHP中直接操纵SQL Server数据库&#xff0c;需要通过安装SQL Server扩展来实现。这篇文章将详细介绍如何在PHP中使用SQL Server扩展来操作数据库。 首先&#xff0…

链表的中间结点-力扣

1、题目描述 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海…

使用 Rust 和 cURL 库下载程序

以下是一个使用 Rust 和 cURL 库的下载器程序&#xff0c;用于下载 图像。此程序使用了 https://www.duoip.cn/get_proxy 的代码。 extern crate curl; ​ use std::io::{self, Read}; use std::error::Error; ​ fn main() {let url "https://www.baidu.com";let …

USB学习(1):USB基础之接口类型、协议标准、引脚分布、架构、时序和数据格式

连接计算机外围设备最简单的方法是通过USB(通用串行总线)。USB是即插即用接口&#xff0c;可以将扫描仪、打印机、数码相机、闪存驱动器等计算机外围设备连接到计算机上。本篇文章就来介绍一下USB的一些基础知识&#xff0c;包括。 文章目录 1 接口类型和标准规范2 引脚分布3 …

【RuoYi移动端】uni-app中的单击和双击事件

1、单击事件&#xff1a; click"enterpriseSelect" 2、双击事件&#xff1a; touchend"userinfo"

TypeScript环境安装

一、windows环境 安装node&#xff0c;附带自动安装npm工具 安装tsc npm install -g typescript 对于不支持 Nuget 的项目类型&#xff0c;你可以使用 TypeScript Visual Studio 扩展。 你可以使用 Visual Studio 中的 Extensions > Manage Extensions 安装扩展。 安装下…

第三节——Vue 基础语法

vue语法分为选项是API&#xff08;Option api&#xff09;和组合式api&#xff08;Composition Api&#xff09;,我们以选项式Api入门 一、基本构成 template、script、style三部分构成。template可以理解成编写html的地方&#xff0c;script编写逻辑js的地方&#xff0c;sty…

centos如何根据端口号查询程序路径

centos如何根据端口号查询程序路径 如果是半路接受的应用&#xff0c;上个人只给你说了程序的端口号&#xff0c;别的都没&#xff0c;那怎么找程序的路径哪&#xff1f;一是给上上个人要&#xff0c;二是自己找&#xff08;我是自己找的&#xff09; 小白教程&#xff0c;一…

【计网 DNS】计算机网络 DNS协议详解:中科大郑烇老师笔记 (六)

目录 0 引言1 DNS概述1.1 定义1.2 DNS域名结构1.2 域名解析步骤 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;计算机四大基础专栏&#x1f4dc; 其他章节&#xff1a;网络快速入门系列、计算机网络&#xff08;一&#xff09;、计算机网络&…

自然语言处理---迁移学习实践

1 微调脚本介绍 指定任务类型的微调脚本: huggingface研究机构提供了针对GLUE数据集合任务类型的微调脚本, 这些微调脚本的核心都是微调模型的最后一个全连接层。通过简单的参数配置来指定GLUE中存在任务类型(如: CoLA对应文本二分类&#xff0c;MRPC对应句子对文本二分类&…

Java基础面试题知识点总结(上篇)

大家好&#xff0c;我是栗筝i&#xff0c;从 2022 年 10 月份开始&#xff0c;我持续梳理出了全面的 Java 技术栈内容&#xff0c;一方面是对自己学习内容进行整合梳理&#xff0c;另一方面是希望对大家有所帮助&#xff0c;使我们一同进步。得到了很多读者的正面反馈。 而在 2…

分享一下我家网络机柜,家庭网络设备推荐

家里网络机柜搞了几天终于搞好了&#xff0c;非专业的&#xff0c;走线有点乱&#xff0c;勿喷。 从上到下的设备分别是&#xff1a; 无线路由器&#xff08;当ap用&#xff09;:TL-XDR6088 插排&#xff1a;德木pdu机柜插排 硬盘录像机&#xff1a;TL-NVR6108-L8P 第二排左边…

面试题 02.01. 移除重复节点

​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 哈希表。遍历链表若当前元素在哈希表中&#xff0c;则将其删除&#xff0c;否则将其加入哈希表。 解题代码&#xff1a; /*…