【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() 获取⽂件创建时间、修改时间、最近访问时间等;
相关推荐
用户805533698032 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner2 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz7 天前
QML Hello World 入门示例
qt
xcyxiner10 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner11 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner11 天前
DicomViewer (添加模型类)3
qt
xcyxiner12 天前
DicomViewer (目录调整) 2
qt
xcyxiner12 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00614 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术14 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript