第三十三课、文件流和数据流------------------狄泰软件学院

一、文件类型

1、Qt中将文件类型分为两大类

(1)、文本文件:文件内容是可读的文本字符

(2)、数据文件:文件内容是直接的二进制数据

2、QFile直接支持文本文件和数据文件的读写

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

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile file("C:/Users/SantaClaus/Desktop/test.hex");

    if (file.open(QIODevice::WriteOnly)) //打开方式:可读、二进制方式
    {
        QString name = "SantaClaus";
        double value = 3.14;

        //按二进制写入时,须进行类型转换,这也是QFile使用上比较麻烦的地方
        file.write(name.toStdString().c_str()); //参数为char*,须转换
        file.write(reinterpret_cast<char*>(&value), sizeof(value));

        file.close();
    }

    if(file.open(QIODevice::ReadOnly)) //只读、二进制方式
    {
        QString name ="";
        double value = 0;

       //read的返回值为QByteArray,当赋值给QString变量类型时进行自动转换
        //以下语句也可以写成name = file.read(10);
        name = QString(file.read(10));
        file.read(reinterpret_cast<char*>(&value), sizeof(value));

        file.close();

        qDebug() << name;
        qDebug() << value;
    }

    return a.exec();
}
main.cpp

二、文本流和数据流

1、Qt提供辅助类简化了文本文件/数据文件的读写

(1)、QTextStream:写入的数据全部转化为可读文本

(2)、QDataStream:写入的数据根据类型转换为二进制

2、IO设备辅助类的使用方式

3、注意事项

(1)、不同的Qt版本的数据流格式可能不同

(2)、当数据流文本可能在不同版本的Qt程序间传递时,需要考虑版本问题

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QTextStream>
#include <QDataStream>
#include <QString>
#include <QFile>
void textstream(QString f)
{
    /*******1、创建QFile对象file************/
    QFile file(f);

    /*******2、使用file对象打开文件************/
    if(file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        /*******3、将数据写入文件************/
        QTextStream out(&file);

        out << QString("D.T.softwear") << endl;
        out << 3.15 << endl;
        file.close();

    }

    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {

        /*******4、将数据从文件中读出************/
        QTextStream in(&file);
        while(! in.atEnd())
        {
            qDebug() << in.readLine();
        }

        file.close();

    }

}

void datastream(QString f)
{
    /*******1、创建QFile对象file************/
    QFile file(f);

    /*******2、使用file对象打开文件************/
    if(file.open(QIODevice::WriteOnly))//以二进制方式打开
    {
        /*******3、将数据写入文件************/
        QDataStream out(&file);

        out.setVersion(QDataStream::Qt_4_7);//指定版本号方便在不同版本Qt上传递数据
        out << QString("D.T.softwear");
        out << 3.15;
        file.close();

    }

    if(file.open(QIODevice::ReadOnly))
    {

        /*******4、将数据从文件中读出************/
        QDataStream in(&file);
        QString s = "";
        double d = 0;

        in.setVersion(QDataStream::Qt_4_7);//指定版本号方便在不同版本Qt上传递数据
        in >> s;
        in >> d;

    file.close();
        qDebug() << s;
        qDebug() << d;



    }

}


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    textstream("F:/Qt/lesson33/text.txt");
    datastream("F:/Qt/lesson33/text.dat");
    return a.exec();
}
main.cpp

三、小结

(1)、Qt的文件辅助类用于方便读写操作

(2)、QTextStream用于文本数据的快速读写

(3)、QDataStream用于二进制数据的快速读写

(4)、QDataStream的文件格式与Qt版本相关

(5)、数据格式文件在程序间传递时,需要考虑版本问题

原文地址:https://www.cnblogs.com/gui-lin/p/6411010.html