文章目录
- 1 :peach:Qt 文件概述:peach:
- 2 :peach:输入输出设备类:peach:
- 3 :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
对象被删除时,临时⽂件被⾃动删除。QTcpSocket
和QUdpSocket
是分别实现了 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()
获取⽂件创建时间、修改时间、最近访问时间等;