马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 2016-11-4 10:31 编辑
老规矩,先从视觉上感受下这个类的‘雄伟’,然后慢慢开始爬着玩儿~
应用程序中经常需要对设备或者文件进行读取或者写入。
也会对本地文件或者目录进行添加、删除、遍历等操作。
从下面三个方面分开说吧~
- 输入\输出设备
QIODevice类是Qt中所有I\O设备的基础接口类!
为QFile、QBuffer、QTcpSocket等支持读\写数据块的设备提供了一个抽象接口。
所以QIODevice类是抽象类,无法被实例化,只是提供I\O功能。
访问一个设备要经历如下逻辑操作:
使用open()函数打开设备->
制定打开模式->
打开后使用write()或者putChar()进行写入->
使用read()、readLine()、readAll()进行读取->
最后使用close()关闭设备
常见的打开模式如下:
憋急给你翻译下:
常量 | 描述 | 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资源等。
QFileInfo可以使用相对(relative)路径或者绝对路径(absolute)来指向一个文件
(Ps:你若分不清,对应点击去重温哈~)
常用函数给你总结下:
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())
{
//进行对临文件的相关操作
}
|