Qt 33 文件流和数据流,QTextStream,QDataStream

学习自唐佐林老师的Qt


总结:

1 使用QFile类的write(),read()直接将字节类数据写入文本文件和数据文件需要类型转换。

2 QTextStream 使用:辅助类对象 ,写入辅助类对象的数据全部转换为可读文本,并用IO设备对象地址对其初始化,以指定类型读出数据

3 QDataStream 使用:辅助类对象 ,写入辅助类对象的数据全部转换为二进制数据,并用IO设备对象地址对其初始化,以指定类型读出数据


在这里插入图片描述

在这里插入图片描述在这里插入图片描述

write()
read()
所操作的是对象必须是直接的字节类数据,如果直接用QFile的 write(),read()操作 非字节类数据,则需要类型转换,比较麻烦。

#include <QtCore/QCoreApplication>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile file("D:/work/QT_TEST/qt/code/33-2/test.hex");

    //并没有注明以文本方式打开文件,则默认为以二进制方式打开文件
    if( file.open(QIODevice::WriteOnly) )
    {
        QString dt = "D.T.Software";
        double value = 3.14;

        /*write所操作的数据必须是直接的字节类型数据char
          QString dt:字符换类 先转换为标准的字符串类型,再转换为直接的二进制数据
          reinterpret_cast<char*>(&value): 转换为直接的字节类型数据 char*,即指向字节类型数据

          write(const char* data,qint64 maxSize);
          write(const char* data);
        */
        file.write(dt.toStdString().c_str());
        file.write(reinterpret_cast<char*>(&value), sizeof(value));

        file.close();
    }

    if( file.open(QIODevice::ReadOnly) )
    {
        QString dt = "";
        double value = 0;

        dt = QString(file.read(12));
        file.read(reinterpret_cast<char*>(&value), sizeof(value));

        file.close();

        qDebug() << dt;
        qDebug() << value;
    }
    
    return a.exec();
}

在这里插入图片描述在这里插入图片描述在这里插入图片描述

实验:

#include <QtCore/QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QDataStream>
#include <QDebug>
void text_stream_test(QString f)
{
    QFile file(f);
    if( file.open(QIODevice::WriteOnly | QIODevice::Text) )
    {
        //创建辅助类对象 ,写入的数据全部转换为可读文本,并用IO设备对象地址对其初始化
        QTextStream out(&file);

//向辅助类对象写数据
        out << QString("D.T.Software") << endl;
        out << QString("Result: ") << 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 f)
{
    QFile file(f);
    if( file.open(QIODevice::WriteOnly) )
    {
        //创建辅助类对象 ,写入的数据根据类型转换为二进制数据,并用IO设备对象地址对其初始化
        QDataStream out(&file);
        out.setVersion(QDataStream::Qt_4_7);
        //将内容输出到一个外部的二进制文件中
        out << QString("D.T.Software");
        out << QString("Result: ");
        out << 3.14;
        file.close();
    }
    if( file.open(QIODevice::ReadOnly) )
    {
        QDataStream in(&file);
        QString dt = "";
        QString result = "";
        double value = 0;
        in.setVersion(QDataStream::Qt_4_7);
        //通过文件辅助对象 将二进制文件中的二进制数据 传出
        in >> dt;
        in >> result;
        in >> value;
        file.close();
        qDebug() << dt;
        qDebug() << result;
        qDebug() << value;
    }
}
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    text_stream_test("C:/Users/hp/Desktop/text.txt");
    data_stream_test("C:/Users/hp/Desktop/data.dat");
    
    return a.exec();
}

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux老A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值