Qt 作为一个通用开发库,提供了跨平台的文件操作能力。下图为Qt5中的类关系图
上图中所涉及的类的简要说明:
-
QIODevice
:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口; -
QFlie
:访问本地文件或者嵌入资源; -
QTemporaryFile
:创建和访问本地文件系统的临时文件; -
QBuffer
:读写QByteArray
; -
QProcess
:运行外部程序,处理进程间通讯; -
QAbstractSocket
:所有套接字类的父类; -
QTcpSocket:TCP
协议网络数据传输; -
QUdpSocket
:传输 UDP 报文; -
QSslSocket
:使用 SSL/TLS 传输数据; -
QFileDevice:Qt5
新增加的类,提供了有关文件操作的通用实现。
QProcess
、
QTcpSocket
、
QUdpSoctet
和
QSslSocket
是顺序访问设备。所谓“顺序访问”,是指它们的数据只能访问一遍:从头走到尾,从第一个字节开始访问,直到最后一个字节,中途不能返回去读取上一个字节;
QFile
、
QTemporaryFile
和
QBuffer
是随机访问设备,可以访问任意位置任意次数,还可以使用
QIODevice::seek()
函数来重新定位文件访问位置指针。
QFile
主要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。我们可以使用QDataStream
或QTextStream
类来读写文件,也可以使用QIODevice
类提供的read()
、readLine()
、readAll()
以及write()
这样的函数。值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过QFileInfo
获取,而不是自己分析文件路径字符串。
我们使用QFileInfo
获取有关该文件的信息。QFileInfo
有很多类型的函数,我们只举出一些例子。比如这里,isDir()
检查该文件是否是目录;isExecutable()
检查该文件是否是可执行文件等。baseName()
可以直接获得文件名;suffix()
则直接获取文件后缀名。我们可以由下面的示例看到,baseName()
和completeBaseName()
,以及suffix()
和completeSuffix()
的区别:
QFileInfo fi("/tmp/archive.tar.gz");
QString base = fi.baseName(); // base = "archive"
QString cbase = fi.completeBaseName(); // base = "archive.tar"
QString ext = fi.suffix(); // ext = "gz"
QString ext = fi.completeSuffix(); // ext = "tar.gz"