Qt通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力。下面是 I/O 设备的类图(Qt5):
l QIODevice:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;
l QFileDevice:Qt5新增加的类,提供了有关文件操作的通用实现。
l QFlie:访问本地文件或者嵌入资源;
l QTemporaryFile:创建和访问本地文件系统的临时文件;
l QBuffer:读写QbyteArray, 内存文件;
l QProcess:运行外部程序,处理进程间通讯;
l QAbstractSocket:所有套接字类的父类;
l QTcpSocket:TCP协议网络数据传输;
l QUdpSocket:传输 UDP 报文;
l QSslSocket:使用 SSL/TLS 传输数据;
3 基本文件操作QFile提供了从文件中读取和写入数据的能力。
我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象最后,使用setFileName()来修改。
QFile主要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。我们可以使用QDataStream或QTextStream类来读写文件,也可以使用QIODevice类提供的read()、readLine()、readAll()以及write()这样的函数。
值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过QFileInfo获取,而不是自己分析文件路径字符串。
4 测试(1)打开、读取、写入文件
功能:创建两个按钮,“read file”按钮打开一个文本框,读取文件的内容到textEdit;“save file”按钮将textEdit中的内容保存到一个文件中。界面如下:
读取文件使用到的函数和步骤:
1)创建一个文件对象:QFilefile(path);
2)以只读方式打开文件:boolisOk=file.open(QIODevice::ReadOnly);
3)读取文件的内容有多种方式,这里介绍两种:
一次性读取文件全部内容:QByteArrayarray=file.readAll();
一次只读取一行:
1 QByteArray array; 2 while (file.atEnd() == false) { 3 //读一行 4 array += file.readLine(); 5 }