Qt---文件系统
一、基本文件操作
1. QFile对文件进行读和写
QFile file( path 文件路径)
读:
file.open(打开方式) QlODevice::readOnly
全部读取->file.readAll(),按行读->file.readLine(),atend()->判断是否读到文件尾
默认支持编码格式utf-8
利用编码格式类指定格式QTextCodec
QTextcodec * codec = QTextCodec::codecForName("gbk" );ui->textEdit->setText( codec->tounicode(array) );
文件对象关闭close
写:
file.open( QlODevice::writeonly / Append)file.write(内容)
file.close关闭
代码示例:
#include "widget.h"
#include "ui_widget.h"
#include<QFileDialog>
#include<QFile>
#include<QTextCodec>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//点击选取文件按钮,弹出文件对话框connect(ui->pushButton,&QPushButton::clicked,[=](){QString path = QFileDialog::getOpenFileName(this,"打开文件","D:\\QT\\");//将路径放入到lineEdith中ui->lineEdit->setText(path);//编码格式类//QTextCodec *codec = QTextCodec::codecForName("gbk");//读取内容放入到textEdit中//QFile默认支持的格式是utf-8QFile file(path);//参数就是读取文件的路径//设置打开方式file.open(QIODevice::ReadOnly);//QByteArray array = file.readAll();QByteArray array;while(!file.atEnd()){array += file.readLine();//按行读}//将读取到的数据 放入到textEdit中ui->textEdit->setText(array);//ui->textEdit->setText(codec->toUnicode(array));//对文件对象进行关闭file.close();//进行写文件file.open(QIODevice::Append);//用追加的方式进行写file.write("啊啊啊啊啊");file.close();});
}Widget::~Widget()
{delete ui;
}
输出如下所示:

2. QFileInfo读取文件信息
QFilelnfo info(路径)
qDebug()<<"大小: " <<info.size()<<”后缀名: " << info.suffix()<<"文件名称:"<<info.fileName()<<”文件路径: "<<info.filePath();
qDebug()<<“创建日期: "<<info.created().toString("yyyy/MM/dd hh;mm:ss");
qDebug()<<"最后修改日期: "<<info.lastModified().toString("yyyy/MM/dd hh;mm:ss");
代码示例:
#include "widget.h"
#include "ui_widget.h"
#include<QFileDialog>
#include<QFile>
#include<QTextCodec>
#include<QFileInfo>
#include<QDebug>
#include<QDateTime>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//点击选取文件按钮,弹出文件对话框connect(ui->pushButton,&QPushButton::clicked,[=](){QString path = QFileDialog::getOpenFileName(this,"打开文件","D:\\QT\\");//将路径放入到lineEdith中ui->lineEdit->setText(path);//编码格式类//QTextCodec *codec = QTextCodec::codecForName("gbk");//读取内容放入到textEdit中//QFile默认支持的格式是utf-8QFile file(path);//参数就是读取文件的路径//设置打开方式file.open(QIODevice::ReadOnly);//QByteArray array = file.readAll();QByteArray array;while(!file.atEnd()){array += file.readLine();//按行读}//将读取到的数据 放入到textEdit中ui->textEdit->setText(array);//ui->textEdit->setText(codec->toUnicode(array));//对文件对象进行关闭file.close();//进行写文件
// file.open(QIODevice::Append);//用追加的方式进行写
// file.write("啊啊啊啊啊");
// file.close();//QFileInfo文件信息类QFileInfo info(path);qDebug()<<"大小:"<<info.size()<<"后缀名:"<<info.suffix()<<"文件名:"<<info.fileName()<<"文件路径:"<<info.filePath();qDebug()<<"创建日期"<<info.created().toString("yyyy/MM/dd hh:mm:ss");qDebug()<<"最后修改日期:"<<info.lastModified().toString("yyyy/MM/dd hh:mm:ss");});
}Widget::~Widget()
{delete ui;
}
输出如下所示:

二、二进制文件读写
#include "widget.h"
#include "ui_widget.h"
#include<QDataStream>
#include<QFile>
#include<QDebug>
#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);writeData();readData();
}void Widget::writeData()
{//创建文件对象QFile file("../test.txt");//打开文件,只写方式打开bool isOK = file.open(QIODevice::WriteOnly);if(true == isOK){//创建数据流和file文件关联//往数据流中写数据,相当于往文件里写数据QDataStream stream(&file);stream<<QString("主要看气质")<<250;file.close();}
}void Widget::readData()
{//创建文件对象QFile file("../test.txt");//打开文件,只读方式打开bool isOK = file.open(QIODevice::ReadOnly);if(true == isOK){//创建数据流和file文件关联//往数据流中写数据,相当于往文件里读数据QDataStream stream(&file);//读的时候按写的顺序取数据QString str;int a;stream>>str>>a;//qDebug()<<str.toUtf8().data()<<a;cout<<str.toUtf8().data()<<a;file.close();}
}Widget::~Widget()
{delete ui;
}
三、文本文件读写
#include "widget.h"
#include "ui_widget.h"
#include<QTextStream>
#include<QFile>
#include<QDebug>
#include<QFileDialog>
#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);writeData();readData();
}void Widget::writeData()
{QFile file;file.setFileName("../demo.txt");bool isOK = file.open(QIODevice::WriteOnly);if(true == isOK){QTextStream stream(&file);//指定编码stream.setCodec("UTF-8");stream<<QString("主要看气质")<<250;file.close();}
}void Widget::readData()
{QFile file;file.setFileName("../demo.txt");bool isOK = file.open(QIODevice::ReadOnly);if(true == isOK){QTextStream stream(&file);//指定编码stream.setCodec("UTF-8");QString str;int a;stream>>str>>a;cout<<str.toUtf8().data()<<a;file.close();}
}void Widget::on_pushButton_clicked()
{QString path = QFileDialog::getOpenFileName(this,"open","../");if (false == path.isEmpty()){QFile file;file.setFileName(path);bool isOK = file.open(QIODevice::ReadOnly);if(true == isOK){QTextStream stream(&file);//指定编码stream.setCodec("UTF-8");QString str = stream.readAll();ui->textEdit->setText(str);}}
}Widget::~Widget()
{delete ui;
}
读UTF-8和非UTF-8格式的输出对比:

四、内存文件读写
#include "widget.h"
#include "ui_widget.h"
#include<QBuffer>
#include<QDebug>
#include<QDataStream>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QByteArray array;QBuffer memFile;//创建内存文件memFile.open(QIODevice::WriteOnly);memFile.write("111111111");memFile.write("222222222222222");memFile.close();qDebug()<<memFile.buffer();qDebug()<<"array"<<array;QBuffer memFile1;memFile1.open(QIODevice::WriteOnly);QDataStream stream(&memFile1);stream<<QString("测试")<<250;memFile1.close();qDebug()<<memFile1.buffer();memFile1.open(QIODevice::ReadOnly);QDataStream in;in.setDevice(&memFile1);QString str;int a;in>>str>>a;memFile.close();qDebug()<<str.toUtf8().data()<<a;
}Widget::~Widget()
{delete ui;
}相关文章:
Qt---文件系统
一、基本文件操作 1. QFile对文件进行读和写 QFile file( path 文件路径) 读: file.open(打开方式) QlODevice::readOnly 全部读取->file.readAll(),按行读->file.readLine(),atend()->判断是否读到文件尾 …...
ruoyi-vue-pro 使用记录(2)
ruoyi-vue-pro 使用记录(2) 数据库商城商品模块数据表营销数据库交易数据库统计数据库 数据库 商城 参考官方文档 ruoyi-vue-pro yudao 项目商城 mall 模块启用及相关SQL脚本 商品模块(中心)以 product_ 作为前缀的表交易模块…...
centos7中如何全局搜索一下nginx的配置文件?
在CentOS 7中搜索Nginx的配置文件,你可以使用一些常用的命令行工具,比如find、grep等。这些工具可以帮助你在文件系统中查找文件,也可以用来查找Docker容器内部的文件,只要你知道如何访问容器的文件系统。 1. 搜索系统中的Nginx配…...
2024年5月10日有感复盘
2024年5月10日有感复盘 时间 今天是一个很美好的一天,原因是很平凡,读书很平凡,玩游戏很平凡,然后生活很平凡,未来可期,听歌很舒服,很喜欢一个人呆在图书馆的感觉,很喜欢发呆&…...
C++通过json文件配置参数
一、安装nlohmann json nlohmann json:安装_nlohmann安装-CSDN博客 依次执行下面指令: git clone https://gitee.com/cuihongxi/mov_from_github.gitcd json-developmkdir buildcd buildcmake ..makesudo make install 二、安装完成后使用 #include…...
idea连接远程仓库
git ->克隆。 url为远程仓库的地址,输入好后,选择项目存放目录,再点击克隆 点击新窗口打开。 切换到对应分支...
初始Django
初始Django 一、Django的历史 Django 是从真实世界的应用中成长起来的,它是由堪萨斯(Kansas)州 Lawrence 城中的一个网络开发小组编写的。它诞生于 2003 年秋天,那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和…...
leetcode56--合并区间
题目描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:interv…...
赋能数据库智能托管,Akamai 发布首款云计算业务线产品!
为了尽可能地简化数据库管理的复杂性,降低数据库成本,Akamai 在近期推出了首款 DBaaS(数据库即服务)产品——Linode Managed Database。这一数据库产品是 Akamai 自3月份收购 Linode 后发布的首款计算业务线产品。 一、更易用的数…...
Go语言系统学习笔记(三):杂项篇
1. 写在前面 公司的新业务开发需要用到go语言,虽然之前没接触过这门语言,但在大模型的帮助下,边看项目边写代码也能进行go的项目开发,不过,写了一段时间代码之后,总感觉对go语言本身,我的知识体…...
黄仁勋炉边对话:创业的超能力与英伟达的加速计算之旅
在TiECon 2024大会上,英伟达的创始人兼CEO黄仁勋与风投公司Mayfield的管理合伙人纳文查德哈进行了一场深入的炉边对话。黄仁勋不仅分享了英伟达的创业故事,还谈到了他对创业和加速计算的深刻见解。下面是我对这次对话的总结,希望能给正在创业…...
.NET开源、功能强大、跨平台的图表库LiveChart2
LiveCharts2 是 从LiveCharts演变而来,它修复了其前身的主要设计问题,它专注于在任何地方运行,提高了灵活性,并继承LiveCharts原有功能。 极其灵活的数据展示图库 (效果图) 开始使用 Live charts 是 .Net 的跨平台图表库,请访问 https://livecharts.dev 并查看目标平…...
疯狂学英语
我上本科的时候,学校出国留学的气氛不浓厚,我们班只有一名同学有出国留学的倾向,我们宿舍八个人没有一个考虑过留学。 只有小昊,在本校上了研究生之后,不知道受到什么影响,想出国留学。那时候小昊利用一切…...
LeetCode //C - 93. Restore IP Addresses
93. Restore IP Addresses A valid IP address consists of exactly four integers separated by single dots. Each integer is between 0 and 255 (inclusive) and cannot have leading zeros. For example, “0.1.2.201” and “192.168.1.1” are valid IP addresses, bu…...
【数据结构】栈和队列OJ面试题
20. 有效的括号 - 力扣(LeetCode) 思路:由于C语言没有栈的接口,所以我们需要自己造一个“模子”。我们直接copy之前的实现的栈的接口就可以了(可以看我之前的博客【数据结构】栈和队列-CSDN博客copy接口)&…...
【联邦学习——手动搭建简易联邦学习】
1. 目的 用于记录自己在手写联邦学习相关实验时碰到的一些问题,方便自己进行回顾。 2. 代码 2.1 本地模型计算梯度更新 # 比较训练前后的参数变化 def compare_weights(new_model, old_model):weight_updates {}for layer_name, params in new_model.state_dic…...
Springboot项目如何创建单元测试
文章目录 目录 文章目录 前言 一、SpringBoot单元测试的使用 1.1 引入依赖 1.2 创建单元测试类 二、Spring Boot使用Mockito进行单元测试 2.1 Mockito中经常使用的注解以及注解的作用 2.2 使用Mockito测试类中的方法 2.3 使用Mockito测试Controller层的方法 2.4 mock…...
Win10 如何同时保留两个CUDA版本并自由切换使用
环境: Win10 专业版 CUDA11.3 CUDA11.8 问题描述: Win10 如何同时保留两个CUDA版本并自由切换 解决方案: 在同一台计算机上安装两个CUDA版本并进行切换可以通过一些环境配置来实现。这通常涉及到管理环境变量,特别是PATH和L…...
实验室纳新宣讲会(java后端)
前言 这是陈旧已久的草稿2021-09-16 15:41:38 当时我进入实验室,也是大二了,实验室纳新需要宣讲, 但是当时有疫情,又没宣讲成。 现在2024-5-12 22:00:39,发布到[个人]专栏中。 实验室纳新宣讲会(java后…...
class常量池、运行时常量池和字符串常量池的关系
类常量池、运行时常量池和字符串常量池这三种常量池,在Java中扮演着不同但又相互关联的角色。理解它们之间的关系,有助于深入理解Java虚拟机(JVM)的内部工作机制,尤其是在类加载、内存分配和字符串处理方面。 类常量池…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...
