输入/输出设备
- QIODevice类是Qt中所有I\O设备的基础接口类!
- 为QFile、QBuffer、QTcpSocket等支持读\写数据块的设备提供了一个抽象接口。
- 所以QIODevice类是抽象类,无法被实例化,只是提供I\O功能
打开模式:
常量 | 描述 |
QIODevice::NotOpen | 设备没有打开 |
QIODevice::ReadOnly | 设备以只读方式打开,此时无法写入 |
QIODevice::WriteOnly | 设备以只写方式打开,此时无法读取 |
QIODevice::ReadWrite | 设备以读写方式打开 |
QIODevice::Append | 设备以附加模式打开,所有的数据都将写入到文件的末尾 |
QIODevice::Truncate | 如果可能,设备在打开前会被阻断,先前所有内容将丢失 |
QIODevice::Text | 读取时,行结尾终止符会被转换为'\n' 写入时,行结尾终止符会被转换为本地编码,类win‘\r\n’ |
QIODevice::Unbuffered | 绕过设备所有的缓冲区 |
QIODevice会区别两种类型的设备:随机存取设备、顺序存储设备
随机存取设备 | 支持使用seek()函数来定位到任意的位置。 文件中的当前位置可以使用pos()函数来获取。 常见类有QFile、QBuffer、QTemporaryFile等 |
顺序存储设备 | 不支持定位到任意的位置,数据必须一次性读取。 pos()和size()函数无法使用 常见类有QTcpSocket、QUpdSocket、QProcess等 |
可以通过isSequential()函数进行判断
通过子类化QIODevice可以为自己的I/O设备提供相同的接口,只需要重新实现readData()、writeData()两个函数即可~
文件级操作
QFile
QFile类提供了一个用于读/写文件的接口,可用于读/写:文本文件、二进制文件、Qt资源的I/O设备
一般在构建QFile对象时指定文件名,当然也可以使用setFileName()在其他任何时间进行设置。
无论哪种操作系统,文件名路径中的文件分隔符都需要使用‘/’
常见的一些应用在文件的函数
open() | 打开 |
close() | 关闭 |
flush() | 刷新 |
exists() | 检查文件是否存在 |
remove() | 删除一个文件 |
size() | 获取文件的大小 |
seek() | 定位到文件的任意位置 |
pos() | 获取当前的位置 |
atEnd() | 判断是否达到了文件末尾 |
文件的数据读/写一般使用QDataStream、QTextStream来完成。
QFileInfo
QFileInfo类提供了与系统无关的文件信息,包括:文件名称、文件系统所在路径、文件访问权限、最近一次修改/读取时间、Qt资源等。
常用函数:
isRelative() | 判断一个QFileInfo对象使用的是相对路径还是绝对路径 | setFile() | 设置QFileInfo指向文件 |
makeAbsolute() | 将一个相对路径转换为绝对路径 | exists() | 查看文件是否存在 |
size() | 获取文件大小 | isFile() | 判断文件类型 |
isDir() | 判断是否为有效路径 | isSymLink() | 判断是否是符号链接连接 |
symLinkTarget() | 函数返回符号链接指向的文件名称 | path() | 获取文件路径 |
fileName() | 获取文件名 | baseName() | 获取文件名基本名称 |
suffix() | 获取文件名的后缀。 | completeSuffix() | 获取文件名中的基本名称。 |
created() | 获取文件的日期 | isReadable() isWritable() isExecutable() | 获取访问权限 |
owner() ownerId() group() groupId() | 获取文件所有权 | permission() | 将文件的访问权限或所有权一次性读取出来。 |
QTemporaryFile
- QTemporaryFile类是一个用来操作临时文件的I/O设备。
- 可以安全的创建一个唯一的临时文件!
- 调用open()函数便会创建一个唯一的临时文件。
- 当销毁QTemporaryFile对象时,该文件会被自动删除掉
- 通过QDir::temPath()获取临时文件生成的临时目录路径
常用的使用格式:
QTemporaryFile file;
if(file.open())
{
//进行对临文件的相关操作
}
参考:
不二如是:https://fishc.com.cn/forum.php?mod=viewthread&tid=78131&ctid=447