为什么需要操作文件?
应用程序经常需要保留数据和配置信息,因此需要对文件进行读取或写入,有时候也需要对本地文件系统的文件或者目录进行操作。
QIODevice类的继承关系图
QIODevice 类是 Qt 所有 I/O 设备的基础类 ,为QFIle等类提供一个抽象接口,这些类中有的为顺序读取,有的为非顺序读取。
QBuffer和QTcpSocket等支持读写数据块的设备提供了一个抽象接口。QIODevice类是抽象的,无法被实例化,一般是使用它所定义的接口来提供设备无关的I/O功能。
在访问一个设备以前,需要使用open()函数打开该设备,而且必须指定正确的打开模式。QIODevice中所有的打开模式由QIODevice::OpenMode枚举类型定义,其取值如表所列,其中的一些值可以使用按位或符号“|”来同时使用。打开设备后可以使用write()或者putChar()来进行写入,使用read()、readLine()或者readAll()进行读取,最后使用close()关闭设备。
QIODevice会区别两种类型的设备:随机存取设备和顺序存储设备。 随机存取设备支持使用seek()函数来定位到任意的位置。文件中的当前位置可以使用pos()函数来获取。这样的设备有QFile、QBuffer等。 顺序存储设备不支持定位到任意的位置,数据必须一次性读取。pos()和size()等函数无法在操作顺序设备时使用。这样的设备有QTcpSocket、QProcess等。
打开模式有哪些?怎么操作?
枚举值 |
描述 |
QIODevice::NotOpen |
未打开 |
QIODevice::ReadOnly |
以只读方式打开 |
QIODevice::WriteOnly |
以只写方式打开 |
QIODevice::ReadWrite |
以读写方式打开 |
QIODevice::Append |
以追加的方式打开,新增加的内容将被追加到文件末尾 |
QIODevice::Truncate |
以重写的方式打开,在写入新的数据时会将游标设置在文件开头 |
QIODevice::Text |
在读取时,将行结束符转换成 \n;在写入时,将行结束符转换成本地格式,例如 Win32 平台上是 \r\n |
QIODevice::Unbuffered |
忽略缓存 |