【Qt】文件操作

文章目录

  • [1 :peach:Qt 文件概述:peach:](#1 :peach:Qt 文件概述:peach:)
  • [2 :peach:输入输出设备类:peach:](#2 :peach:输入输出设备类:peach:)
  • [3 :peach:文件读写类:peach:](#3 :peach:文件读写类:peach:)
  • [4 :peach:文件和目录信息类:peach:](#4 :peach:文件和目录信息类:peach:)

1 🍑Qt 文件概述🍑

文件操作是应⽤程序必不可少的部分。Qt 作为⼀个通⽤开发库,提供了跨平台的⽂件操作能⼒。 Qt提供了很多关于文件的类,通过这些类能够对⽂件系统进⾏操作,如文件读写、⽂件信息获取、⽂件复制或重命名等。


2 🍑输入输出设备类🍑

在 Qt 中,⽂件读写的类为 QFile 。QFile 的⽗类为 QFileDevice ,QFileDevice 提供了⽂件交互操作的底层功能。 QFileDevice 的⽗类是 QIODevice,QIODevice 的⽗类为 QObject

QIODevice 是 Qt 中所有输⼊输出设备(input/output device,简称 I/O 设备)的基础类,I/O 设备就是能进⾏数据输⼊和输出的设备,例如⽂件是⼀种 I/O 设备,⽹络通信中的 socket 是 I/O 设备, 串⼝、蓝⽛等通信接⼝也是 I/O 设备,所以它们也是从 QIODevice 继承来的。Qt 中主要的⼀些 I/O 设备类的继承关系如下图所⽰:

上图中各类的说明如下:

  • QFile 是⽤于⽂件操作和⽂件数据读写的类,使⽤ QFile 可以读写任意格式的⽂件。
  • QSaveFile 是⽤于安全保存⽂件的类。使⽤ QSaveFile 保存⽂件时,它会先把数据写⼊⼀个临时⽂件,成功提交后才将数据写⼊最终的⽂件。如果保存过程中出现错误,临时⽂件⾥的数据不会被写⼊最终⽂件,这样就能确保最终⽂件中不会丢失数据或被写⼊部分数据。 在保存⽐较⼤的⽂件或复杂格式的⽂件时可以使⽤这个类,例如从⽹络上下载⽂件等。
  • QTemporaryFile 是⽤于创建临时⽂件的类。使⽤函数 QTemporaryFile::open() 就能创建⼀个⽂件名唯⼀的临时⽂件,在 QTemporaryFile 对象被删除时,临时⽂件被⾃动删除。
  • QTcpSocketQUdpSocket 是分别实现了 TCP 和 UDP 的类。
  • QSerialPort 是实现了串⼝通信的类,通过这个类可以实现计算机与串⼝设备的通信。
  • QBluetoothSocket 是⽤于蓝⽛通信的类。⼿机和平板计算机等移动设备有蓝⽛通信模块,笔记本电脑⼀般也有蓝⽛通信模块。通过QBluetoothSocket类,就可以编写蓝⽛通信程。如编程实现笔记本电脑与⼿机的蓝⽛通信。
  • QProcess 类⽤于启动外部程序,并且可以给程序传递参数。
  • QBuffer 以⼀个 QByteArray 对象作为数据缓冲区,将 QByteArray 对象当作⼀个 I/O 设备来读写。

3 🍑文件读写类🍑

在 Qt 中,⽂件的读写主要是通过 QFile 类来实现。在 QFile 类中提供了⼀些⽤来读写⽂件的⽅法。对于⽂件的操作主要有:

  • 读数据:QFile 类中提供了多个⽅法⽤于读取⽂件内容;如 read()、readAll()、readLine()等。
  • 写数据:QFile 类中提供了多个⽅法⽤于往⽂件中写内容;如 write()、writeData()等。
  • 关闭⽂件:⽂件使⽤结束后必须⽤函数 close() 关闭⽂件。

访问⼀个设备之前,需要使⽤ open()函数 打开该设备,⽽且必须指定正确的打开模式,QIODevice 中有的打开模式由 QIODevice::OpenMode 枚举变量定义,其取值如下:

QIODevice::NotOpen 没有打开设备
QIODevice::ReadOnly 以只读⽅式打开设备
QIODevice::WriteOnly 以只写⽅式打开设备
QIODevice::ReadWrite 以读写⽅式打开设备
QIODevice::Append 以追加⽅式打开设备,数据将写到⽂件末尾
QIODevice::Truncate 每次打开⽂件后重写⽂件内容,原内容将被删除
QIODevice::Text 在读⽂件时,⾏尾终⽌符会被转换为 \n;当写⼊⽂件时,⾏尾终⽌符会被转换为本地编码。如 Win32上为\r\n
QIODevice::Unbuffered ⽆缓冲形式打开⽂件,绕过设备中的任何缓冲区
QIODevice::NewOnly ⽂件存在则打开失败,不存在则创建⽂件

⽰例1:读取⽂件内容

代码示例:

结果演示:

⽰例2:写⽂件

代码示例:

刚开始打开文件时:

我们在文本框里面重新更改数据然后进行保存:

然后重新打开文件看:


4 🍑文件和目录信息类🍑

QFileInfo 是 Qt 提供的⼀个⽤于获取⽂件和⽬录信息的类,如获取⽂件名、⽂件⼤⼩、⽂件修改⽇期等。QFileInfo类中提供了很多的⽅法,常⽤的有:

  • isDir() 检查该⽂件是否是⽬录;
  • isExecutable() 检查该⽂件是否是可执⾏⽂件;
  • fileName() 获得⽂件名;
  • completeBaseName() 获取完整的⽂件名;
  • suffix() 获取⽂件后缀名;
  • completeSuffix() 获取完整的⽂件后缀;
  • size() 获取⽂件⼤⼩;
  • isFile() 判断是否为⽂件;
  • fileTime() 获取⽂件创建时间、修改时间、最近访问时间等;
相关推荐
落落落sss10 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
简单.is.good28 分钟前
【测试】接口测试与接口自动化
开发语言·python
Yvemil71 小时前
MQ 架构设计原理与消息中间件详解(二)
开发语言·后端·ruby
程序员是干活的1 小时前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节
我是陈泽1 小时前
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
开发语言·python·程序员·编程·python教程·python学习·python教学
优雅的小武先生1 小时前
QT中的按钮控件和comboBox控件和spinBox控件无法点击的bug
开发语言·qt·bug
Death2001 小时前
使用Qt进行TCP和UDP网络编程
网络·c++·qt·tcp/ip
虽千万人 吾往矣1 小时前
golang gorm
开发语言·数据库·后端·tcp/ip·golang
创作小达人1 小时前
家政服务|基于springBoot的家政服务平台设计与实现(附项目源码+论文+数据库)
开发语言·python
郭二哈1 小时前
C++——list
开发语言·c++·list