Qt 第24课、文本流和数据流

1、文件类型

  • Qt 中将文件类型分为两大类
    — 文本文件:文件内容是可读的文本字符
    — 数据文件:文件内容是直接的二进制数据

我们知道,QFile 直接支持文本文件和数据文件的读写
在这里插入图片描述
思考:如何将一个浮点数据写入文本文件和数据文件?

程序:

#include <QCoreApplication>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile file("C:/Users/xiebs/Desktop/test.hex");
    if(file.open(QIODevice::WriteOnly))
    {
        QString str = "D.T.SoftWare";
        double value = 3.14;
        file.write(str.toStdString().c_str());      //转换成字节数据
        file.write(reinterpret_cast<char*>(&value), sizeof(value));
        file.close();
    }

    if(file.open(QIODevice::ReadOnly))
    {
        QString str = "";
        double value = 0;
        str = QString(file.read(12));
        file.read(reinterpret_cast<char*>(&value), sizeof(value));
        qDebug() << str;
        qDebug() << value;

        file.close();
    }
    return a.exec();
}

在这里插入图片描述
结论:如果直接利用 QFile 进行数据或文本的读写,是肯定可行的。不方便的地方在于类型转换

2、文本流和数据流

  • Qt 提供辅助类简化了文本文件 / 数据文件的读写
    — QTextStream:写入的数据全部转换为可读文本
    — QDataStream:写入的数据根据类型转换为二进制数据
  • IO设备辅助类的使用方式
    在这里插入图片描述

3、数据流文件的版本信息

  • 不同Qt版本的数据流文件格式可能不同
    void setVersion(int v) //设置读写版本号
    int version() const //获取读写版本号
    当数据流文件可能在不同版本Qt 程序间传递数据时,需要考虑版本问题。
#include <QCoreApplication>
#include <QTextStream>
#include <QDataStream>
#include <QFile>
#include <QDebug>

void text_stream_test(QString str)
{
    QFile file(str);
    if(file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        QTextStream out(&file);
        out << "D.T.SoftWare" << endl;
        out << "xiebs" << endl;
        out << '5' << '*' << '6' << '=' << 5*6 << endl;
        file.close();
    }
    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream in(&file);
        while (!in.atEnd())
        {
            QString line = in.readLine();
            qDebug() << line;
        }
        file.close();
    }

}
void data_stream_test(QString str)
{
    QFile file(str);
    if(file.open(QIODevice::WriteOnly))
    {
        QDataStream out(&file);
        out.setVersion(QDataStream::Qt_5_12);
        out << QString("D.T.SoftWare");
        out << QString("Result");
        out << 3.14;
        file.close();
    }

    if(file.open(QIODevice::ReadOnly))
    {
        QDataStream in(&file);
        QString str1 = "";
        QString str2 = "";
        double d = 0;
        in.setVersion(QDataStream::Qt_5_12);

        in >> str1;
        in >> str2;
        in >> d;

        qDebug() << str1;
        qDebug() << str2;
        qDebug() << d;

        file.close();
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    text_stream_test("C:/Users/xiebs/Desktop/test.text");
    data_stream_test("C:/Users/xiebs/Desktop/test.dat");

    return a.exec();
}

在这里插入图片描述
4、小结

  • Qt 中的文件辅助类用于方便读写操作
  • QTextStream 用于文本数据的快速读写
  • QDataStream 用于二进制数据的快速读写
  • QDataStream 的文件格式与Qt 版本相关
  • 数据格式在程序间传递时,需要考虑版本问题
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读