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


    一、文件类型

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

  • 相关阅读:
    CUBRID学习笔记 41 sql语法之select
    CUBRID学习笔记 40 使用net修改数据
    CUBRID学习笔记 39 net使用dataset 返回查询的数据
    CUBRID学习笔记 38 net调用java的函数过程
    CUBRID学习笔记 36 在net中添加多行记录
    CUBRID学习笔记 37 ADO.NET Schema Provider
    CUBRID学习笔记 35 net驱动错误码和信息 cubrid教程示例
    程序员应该关注的一些事儿
    如何区分一个程序员是“老手“还是“新手“?
    10个调试和排错的小建议
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6411010.html
Copyright © 2020-2023  润新知