【qt】文件类(QFile)

很高兴你能看到这篇文章,同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 :
https://www.yuque.com/alive-m4b9n

目录

  • QFile 主要功能
  • QFile 操作步骤
  • QFile 其他常用函数
  • 案例分析及实现
    • 功能一实现:打开文件并显示
    • 功能二实现:另存为

QFile 是 Qt 提供的一个用于文件操作的类,继承自 QIODevice ,用于处理文件的读取、写入、删除等操作。

使用前需要引入头文件

QFile 主要功能

  • 打开文件
  • 读取数据
  • 写入数据
  • 删除文件
  • 检查文件状态
  • 复制和重命名文件

QFile 支持文本和二进制模式,可以用 QTextStreamQDataStream 进行高效的文件操作。

QFile 操作步骤

1️⃣ 创建 QFile 对象

//构造函数
QFile(const QString &name, QObject *parent)
QFile(QObject *parent)
QFile(const QString &name)---------示例--------------
QFile file("test.txt");

2️⃣ 调用 open() 以指定模式打开文件

 bool open(FILE *fh, QIODevice::OpenMode mode,  //通过文件路径打开QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)bool open(int fd, QIODevice::OpenMode mode, 	//通过fd文件描述符打开QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)------------------示例-----------------
QFile file("test.txt");
file.open(QIODevice::ReadWrite | QIODevice::Text);

打开模式如下,需要多个模式时用 |隔开

模式描述
ReadOnly只读模式
WriteOnly只写模式
ReadWrite读写模式
Append追加模式(不会覆盖已有内容)
Text以文本模式打开(自动转换换行符)
Truncate清空文件内容

3️⃣ 文件操作:读或者写

//读
QByteArray QIODevice::read(qint64 maxSize) //读取最大maxsize的数据
QByteArray QIODevice::readAll()  //读取文件所有数据,返回QByteArray数组
//写
qint64 write(const QByteArray &byteArray) //QByteArray 数据
qint64 write(const char *data, qint64 maxSize)  //char* 指针,数据大小----------示例-----------
QFile file("example.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QByteArray content = file.readAll();qDebug() << "文件内容:\n" << content;file.close();
}

4️⃣ 关闭

void QFileDevice::close()

QFile 其他常用函数

类别函数作用示例代码
文件基本操作exists()判断文件是否存在if (file.exists()) qDebug() << "文件存在"
remove()删除文件file.remove();
copy(src, dst)复制文件QFile::copy("test.txt", "backup.txt");
rename(old, new)重命名/移动文件file.rename("new_name.txt");
flush()刷新缓冲区file.flush();
文件信息size()获取文件大小(字节)qDebug() << file.size();
fileName()获取文件名(可能是相对路径)qDebug() << file.fileName();
absoluteFilePath()获取文件的绝对路径qDebug() << QFileInfo(file).absoluteFilePath();
permissions()获取文件权限qDebug() << file.permissions();
setPermissions()修改文件权限file.setPermissions(QFileDevice::ReadOwner)
读写文件isReadable()是否可读if (file.isReadable()) qDebug() << "可读";
isWritable()是否可写if (file.isWritable()) qDebug() << "可写";
文件状态isOpen()判断文件是否已打开if (file.isOpen()) qDebug() << "文件已打开";
isWritable()判断文件是否可写if (file.isWritable()) qDebug() << "文件可写";
handle()获取底层文件句柄int fd = file.handle();

案例分析及实现

需求

  • 打开文件对话框,获取文件路径名,然后通过文件操作将文件内容显示到输入框上
  • 点击另存为按钮可以保存当前文件到其他地方去。

功能一实现:打开文件并显示

思路

1️⃣ 打开文件选择对话框QFileDialog::getOpenFileName

2️⃣ 获取用户选择的文件路径

3️⃣ 使用 QFile 读取文件内容 4️⃣ 将内容显示到 QTextEdit

mainwindow.h

private slots:
void on_openButton_clicked();  // 打开文件
void on_saveAsButton_clicked(); // 另存为private:
Ui::MainWindow *ui;
QString currentFilePath;  // 存储当前文件路径

mainwindow.cpp

//打开文件
void MainWindow::on_openButton_clicked()
{//打开文件对话框,获取文件路径QString filePath = QFileDialog::getOpenFileName(this,"选择文件","","文本文件(*.txt);;所有文件(*.*)");if(filePath.isEmpty()){qDebug()<<"未选择文件";return;}qDebug() << "选择的文件路径:" << filePath;currentFilePath = filePath; //记录当前的文件路径//打开文件QFile file(filePath);if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug()<<"文件打开失败"<<file.errorString();//输出错误信息return;}//读取文件内容QTextStream in(&file);QString fileContent = in.readAll();file.close();//显示到QtextEdit上ui->textEdit->setText(fileContent);
}

效果

功能二实现:另存为

mainwindow.cpp

// 另存为
void MainWindow::on_saveAsButton_clicked()
{// 打开文件对话框,获取保存路径QString saveFilePath = QFileDialog::getSaveFileName(this, "另存为", "","文本文件 (*.txt);;所有文件 (*.*)");if (saveFilePath.isEmpty()) {qDebug() << "未选择保存路径";return;}qDebug() << "保存文件路径:" << saveFilePath;// 打开文件QFile file(saveFilePath);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {qDebug() << "文件保存失败:" << file.errorString();return;}// 获取 QTextEdit 中的内容QString content = ui->textEdit->toPlainText();// 写入文件QTextStream out(&file);out << content;file.close();qDebug() << "文件保存成功";
}

效果

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

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

相关文章

基于AT89C52单片机的轮胎压力监测系统

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/90545655?spm1001.2014.3001.5503 功能介绍&#xff1a; 采用MPX4115压力传感器进行轮胎压力检测&#xff1b;使用LCD液晶显示器显示轮胎压力&#xff1b;若压力过…

shell脚本--MySQL简单调用

实现功能 增 数据库的创建&#xff0c;数据表的创建已经实现 创建用户 删 删除数据库&#xff0c; 删除库下的某个表&#xff0c; 删除某个用户 改 暂无 查 查看所有的数据库&#xff0c; 查看某个库下的所有数据表&#xff0c; 查看某个表的结构&#xff0c; 查…

计算机网络 OSI参考模型

目录 OSS七层 OSI通信过程1 OSI通信过程2 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 OSS七层 OSI通信过程1 OSI通信过程2 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

2025年华为HCIP题库分享

1101、 【拖拽题】OPSF邻接关系建立的过程中需要使用不同的报文&#xff0c;那么请分别将以下各个状态和该状态使用的报文联系起来。 答题格式为&#xff1a;11 22 33 43 正确答案&#xff1a;【12】【21】【24】【33】 解析&#xff1a; 建立邻居关系 RouterA的一个连接到广…

DIskgenius使用说明

文章目录 一、概述1. 软件简介2. 系统要求 二、核心功能1. 分区管理(1) 查看磁盘分区(2) 创建与删除分区(3) 调整分区大小(4) 格式化分区 2. 数据恢复(1) 恢复已删除文件(2) 恢复丢失分区(3) 恢复误格式化分区 3. 磁盘复制(1) 克隆磁盘(2) 磁盘镜像 4. 文件操作(1) 文件复制与移…

linux--------------进程控制(上)

1.进程创建 1.1fork函数初识 在linux中fork函数是⾮常重要的函数&#xff0c;它从已存在进程中创建⼀个新进程。新进程为⼦进程&#xff0c;⽽原进 程为⽗进程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;⾃进程中返回0&#xff0c;⽗进程返回⼦进程id…

windows免密SSH连接 ubuntu教程

文章目录 前情提要step1. 在windows下生成SSH密钥step2. SSH公钥copy到ubuntu的~/.ssh/authorized_keys内step3. 修改文件权限&#xff08;这一步完成后就可以实现免密SSH连接了&#xff09; 前情提要 ubuntu下安装SSH服务 sudo apt-get install openssh-serverwindows下安装…

中级:数组算法面试题全解析

一、引言 在Java面试中&#xff0c;数组相关的算法题是考察候选人基础算法能力的常见类型。面试官通过这些问题了解候选人在面对具体问题时的逻辑思维和代码实现能力。本文将深入剖析常见的数组算法面试题&#xff0c;结合实际开发场景&#xff0c;帮助读者全面掌握这些知识点…

《Linux运维实战:Ubuntu 22.04配置pam实现密码复杂度策略》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;Linux运维实战总结 一、背景信息 由于安全方面的考虑&#xff0c;先要求Ubuntu 22.04系统需配置密码复杂度策略&#xff0c;先要求如下&#xff1…

JavaScript数据结构

目录 JavaScript数据结构 一、基础数据结构 1. 数组&#xff08;Array&#xff09; 2. 对象&#xff08;Object&#xff09; 二、ES6 高级数据结构 1. Map 2. Set 3. WeakMap 与 WeakSet 三、类型化数组&#xff08;Typed Arrays&#xff09; 四、其他数据结构实现 …

魔改chromium——基础环境搭建

谷歌chromium环境要求详细文档 软件和环境要求&#xff0c;必须安装&#xff0c;硬性要求 系统环境&#xff1a;Windows 10&#xff0c;内存最小8GB&#xff0c;推荐16GB&#xff0c;NTFS格式磁盘最少100GB空间Git版本&#xff1a;安装最新版本即可&#xff0c;Git桌面端下载…

电子文档安全管理系统V6.0接口backup存在任意文件下载漏洞

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 电子文档安全管理系统 V6.0 reso…

5.3 MVVM模型

一、MVVM的基本概念 MVVM的基本概念&#xff1a;Model、View、ViewModel 组件职责示例内容Model封装业务数据User类&#xff0c;包含姓名、年龄属性View负责UI呈现XAML界面&#xff0c;包含数据绑定ViewModel连接View和Model&#xff0c;处理视图逻辑MainViewModel包含命令和…

python采集淘宝拍立淘按图搜索API接口,json数据示例参考

以下是关于淘宝拍立淘按图搜索API接口的详细说明及JSON数据示例&#xff1a; 一、接口概述 淘宝拍立淘按图搜索API接口是淘宝开放平台提供的一项基于图像识别技术的服务&#xff0c;允许开发者通过上传商品图片&#xff0c;获取与图片相似或相同的商品列表。该接口广泛应用于…

每天学一个 Linux 命令(8):ls

大家好,欢迎来到《每天掌握一个Linux命令》系列。在这个系列中,我们将逐步学习并熟练掌握Linux命令,今天,我们要学习的命令是ls。 01 什么是ls命令 在Linux系统中,ls命令是“list”的缩写,其英文全称为“list directory contents”,即“列出目录内容”。该命令非常实用…

00.【Linux系统编程】 Linux初识(云服务器设置CentOS并使用、Xshell链接云服务器)

目录 一、华为云服务器免费体验申请 二、Xshell远程链接创建好的华为云服务器 2.1 下载Xshell 2.2 Xshell远程连接华为云服务器 一、华为云服务器免费体验申请 华为云官网 1. 进入华为云官网&#xff0c;最上面一栏点活动&#xff0c;并进入免费体验中心。 2. 找到含有“…

arm非对齐访问编译器选项

gcc编译选项&#xff1a; -munaligned-access gcc编译选项&#xff1a; -mno-unaligned-access Enables (or disables) reading and writing of 16- and 32- bit values from addresses that are not 16- or 32- bit aligned. By default unaligned access is disabled for…

jmeter线程组高并发(详细讲解)

在 JMeter 中&#xff0c;线程组是测试计划的核心组件&#xff0c;用于定义虚拟用户&#xff08;线程&#xff09;的行为。线程组的属性决定了测试的并发用户数、加载速度、运行时间等。以下是线程组属性的详细讲解&#xff1a; 1. 名称&#xff08;Name&#xff09; 定义&…

vs2022中使用spdlog、C++日志

spdlog::set_level(spdlog::level::info); // 只显示info及比info高级的信息&#xff0c;trace 和 debug 不显示 参考&#xff1a;Windows10中使用VS2022和Cmake编译构建C开源日志库-spdlog-腾讯云开发者社区-腾讯云 spdlog C日志管理 | 快速上手教程 - 知乎 1.按照上述步骤…

SOME/IP-SD -- 协议英文原文讲解10

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.5 Non…