Qt5 文件类图
qt5-io-device.png

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()函数来重新定位文件访问位置指针。

示例代码:

#include <QApplication>
#include <QWidget>
#include <QFileDevice>
#include <QFile>
#include <QDebug>
#include <QDir>

int main(int argc, char **argv)
{
    QApplication a(argc, argv);

    //QWidget w;

    QFile file("in.txt");  //txt文件目录应当注意
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qDebug() << "Open file failed.";
        qDebug() << QDir::currentPath();
        return -1;
    }
    else
    {
        while(!file.atEnd())
        {
            qDebug() << file.readLine();
        }
    }
  //  w.show();
    return a.exec();
}

代码中应当注意的点有如下:
在我测试以上代码时,发现txt文件并不是与exe文件在同一目录,否则会打开失败。应当把txt文件放在更上一级的目录,比如我的exe文件在

E:\code\QT\build-QFile-Desktop_Qt_5_12_0_MinGW_64_bit-Debug\debug

那么txt文件应当放在

E:\code\QT\build-QFile-Desktop_Qt_5_12_0_MinGW_64_bit-Debug

open函数如下:

[override virtual] bool QFile::open(QIODevice::OpenMode mode)
The mode must be QIODevice::ReadOnly, QIODevice::WriteOnly, or QIODevice::ReadWrite. It may also have additional flags, such as QIODevice::Text and QIODevice::Unbuffered.

该文章部分内容取自Qt学习之路

Last modification:June 26, 2019
If you think my article is useful to you, please feel free to appreciate