Qt之文件详解(一)
来源:互联网 发布:mac怎么剪辑音频 编辑:程序博客网 时间:2024/06/08 14:05
文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。从本章开始,我们来了解下 Qt 的文件以及输入输出的功能,也就是 I/O 系统。
Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力。下面是 I/O 设备的类图:
Qt4
Qt5
从上面的类图可以看出,Qt4 和 Qt5 在 I/O 设备部分大同小异。只不过 Qt5 新增加了一个QFileDevice类。途中所涉及的类及其用途简要说明如下:
这其中,QProcess、QTcpSocket、QUdpSoctet和QSslSocket是顺序访问设备。所谓“顺序访问”,是指它们的数据只能访问一遍:从头走到尾,从第一个字节开始访问,直到最后一个字节,中途不能返回去读取上一个字节;QFile、QTemporaryFile和QBuffer是随机访问设备,可以访问任意位置任意次数,还可以使用QIODevice::seek()函数来重新定位文件访问位置指针。
本章将主要介绍QFile及其相关类,后面的章节则开始介绍有关输入输出的流。
在所有的 I/O 设备中,文件 I/O 是最重要的部分之一。因为我们大多数的程序依旧需要首先访问本地文件(当然,在云计算大行其道的将来,这一观点可能改变)。QFile提供了从文件中读取和写入数据的能力。Qt5 新加入的QFileDevice类,则将这部分公共操作放到了这个单独的类中。显然,这部分代码在 Qt4 中位于QFile类。这样看来,Qt5 的代码结构更为清晰,层次更好。
我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象最后,使用setFileName()来修改。QFile需要使用 / 作为文件分隔符,不过,它会自动将其转换成操作系统所需要的形式。例如 C:/windows 这样的路径在 Windows 平台下同样是可以的。
QFile主要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。我们可以使用QDataStream或QTextStream类来读写文件,也可以使用QIODevice类提供的read()、readLine()、readAll()以及write()这样的函数。值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过QFileInfo获取,而不是自己分析文件路径字符串。
下面我们使用一段代码来看看QFile的有关操作:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
在这段代码中,我们首先使用QFile创建了一个文件对象。这个文件名字是 in.txt。如果你不知道应该把它放在哪里,可以使用app.applicationFilePath();
或者app.applicationDirPath();
来获得应用程序的执行路径。只要将这个文件放在同执行路径一致的目录下即可。可以使用QDir::currentPath()
来获得应用程序执行时的当前路径。只要将这个文件放在与当前路径一致的目录下即可。然后,我们使用open()
函数打开这个文件,打开形式是只读方式,文本格式。这个类似于fopen()
的 r 这样的参数。open()
函数返回一个 bool 类型,如果打开失败,我们在控制台输出一段提示然后程序退出。否则,我们利用while
循环,将每一行读到的内容输出。
程序的第二部分,我们使用QFileInfo
获取有关该文件的信息。QFileInfo
有很多类型的函数,我们只举出一些例子。比如这里,isDir()
检查该文件是否是目录;isExecutable()
检查该文件是否是可执行文件等。baseName()
可以直接获得文件名;suffix()
则直接获取文件后缀名。我们可以由下面的示例看到,baseName()
和completeBaseName()
,以及suffix()
和completeSuffix()
的区别:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- Qt之文件详解(一)
- Qt之QVariant和QByteArray详解(一)
- Qt之文件详解(二)二进制文件读写
- Qt之文件详解(三)文本文件读写
- Qt 动画详解一
- Qt 动画详解一
- Qt 动画详解一
- Qt之美(一):d指针/p指针详解
- Qt之美(一):d指针/p指针详解
- qt文件操作(一)
- Qt .pro文件 详解
- Qt .pro文件 详解
- Qt .pro文件 详解
- Qt,pro文件详解
- Qt pro 文件详解
- Qt项目文件详解
- Qt项目文件详解
- Qt .pro文件详解
- acm sdut 免费馅饼
- C#反射学习
- CentOS7 安装PyQt5中遇到的错误及解决
- linux 配置ssh无密码登录不起作用的解决方案
- vim使用(转载)
- Qt之文件详解(一)
- 仿mybatis逆向工程
- static,extern关键字作用?
- 深入理解ThreadLocal
- Android 字体高度的研究
- 蓝桥杯——2008 北航计算机研究生机试真题(2017.2.8)
- ubuntu16.04 64位 cpu安装tensorflow+theano+keras+caffe+xgboost
- tmux的简单设置
- leecode 解题总结:34. Search for a Range