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


    一、文件类型

    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)、数据格式文件在程序间传递时,需要考虑版本问题

  • 相关阅读:
    集训第四周(高效算法设计)P题 (构造题)
    集训第四周(高效算法设计)O题 (构造题)
    集训第四周(高效算法设计)N题 (二分查找优化题)
    集训第四周(高效算法设计)M题 (扫描法)
    集训第四周(高效算法设计)L题 (背包贪心)
    集训第四周(高效算法设计)K题 (滑窗问题)
    集训第四周(高效算法设计)J题 (中途相遇法)
    集训第四周(高效算法设计)I题 (贪心)
    UVA302 John's trip(欧拉回路)
    P4281 [AHOI2008]紧急集合 / 聚会
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6411010.html
Copyright © 2020-2023  润新知