第32课 Qt中的文件操作

1. Qt的中IO操作

(1)Qt中IO操作的处理方式

  ①Qt通过统一的接口简化了文件和外部设备的操作方式

  ②Qt中的文件被看作一种特殊的外部设备

  ③Qt中的文件操作与外部设备的操作相同

(2)IO操作中的关键函数接口——IO操作的本质连续存储空间的数据读写

  ①打开设备:bool open(OpenMode mode);

  ②读取数据:QByteArray read(qint64 maxSize);

  ③写入数据:qint64 write(const QByteArray& byteArray);

  ④关闭设备:void close();

(3)Qt中IO设备的类型

  ①顺序存储设备:只能从头开始顺序的读写数据,不能指定数据的读写位置(如串口)

  ②随机存取设备:可以定位到任意的位置进行数据的读写(seek function),如文件

2. Qt中IO设备的继承层次图

第32课 Qt中的文件操作

3. Qt中的文件操作

(1)QFile是Qt中用于文件操作的类

(2)QFile对象对应到计算机上的一个文件

(3)QFileInfo类用于读取文件的属性信息

【编程实验】文件操作初体验

第32课 Qt中的文件操作

//32-1.pro

QT += core
QT -= gui

CONFIG += c++

TARGET = -
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

//main.cpp

#include <QCoreApplication>
#include <QFile>
#include <QFileInfo>
#include <QDateTime>
#include <QDebug>

void write(QString f)
{
    QFile file(f);

    //可写、文本文本,当文件不存在时会创建新文件
    if (file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        file.write("Line1\n");
        file.write("Line2\n");
        file.close();
    }
}

void read(QString f)
{
    QFile file(f);

    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QByteArray ba = file.readAll();//file.readLine(5);//读4个字符
        QString s(ba);

        qDebug() << s;

        file.close();
    }
}

void info(QString f)
{
    QFile file(f);
    QFileInfo info(file);

    qDebug() << info.exists();
    qDebug() << info.isFile();//判断文件或文件夹
    qDebug() << info.isReadable();
    qDebug() << info.isWritable();
    qDebug() << info.created();
    qDebug() << info.lastRead();
    qDebug() << info.lastModified();
    qDebug() << info.path(); //路径,不包含文件名
    qDebug() << info.fileName();//如"test.txt"
    qDebug() << info.suffix();//后缀名(如txt)
    qDebug() << info.size();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString file("C:/Users/SantaClaus/Desktop/test.txt");

    write(file);

    read(file);

    info(file);

    return a.exec();
}

4. Qt中的临时文件操作类:QTemporaryFile

(1)安全地创建一个全局唯一的临时文件(被存放在系统的临时文件目录下)

(2)当对象销毁后,对应的临时文件将随后被删除(具体的删除时机由操作系统决定)

(3)临时文件的打开方式己被指定为:QIODevic::ReadWrite

(4)临时文件继承于QFile,常用于大数据传据或者进程间通信的场合。

【编程实验】临时文件的使用

//32-2.pro

QT += core
QT -= gui

CONFIG += c++

TARGET = -
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

//main.cpp

#include <QCoreApplication>
#include <QTemporaryFile>
#include <QFileInfo>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QTemporaryFile tempFile; //无须指定路径(保存在系统临时文件夹中)
                             //文件名也不必指定,是个临时的文件名
    if(tempFile.open())
    {
        tempFile.write("SantaClaus");
        tempFile.close();
    }

    tempFile.open();
    QByteArray ba = tempFile.readAll();
    QString s(ba);

    qDebug() << s;

    QFileInfo info(tempFile);

    qDebug() << info.isFile();
    qDebug() << info.path();
    qDebug() << info.fileName();

    return a.exec();
}

/*输出结果:
"SantaClaus"
true
"C:/Users/SantaClaus/AppData/Local/Temp"
"32-2.Hp7352"
*/

5. 小结

(1)Qt通过统一的方式读写文件和外部设备

(2)Qt中IO设备类型分为顺序存取随机存取两种

(3)QFile提供了文件操作相关的方法

(4)QFileInfo提供了读取文件属性相关的方法

(5)Qt中提供了临时文件操作类:QTemporaryFile

上一篇:golang中的文件操作


下一篇:背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体