39黑马QT笔记之QTextStream读写文件(带有两个全局宏)

39黑马QT笔记之QTextStream读写文件(带有两个全局宏)

1 QTextStream和QDataStream相比:
1)优点:可以在文本写入、读取前,按指定编码方式写入、读取。

2)缺点:虽然操作步骤一样。但区别是,写进时由于没有空格,第一个str读取时,100会被当成字符串与"我笑了"被str一起读走,导致整型a没有数据,默认赋值为0。所以QTextStream在读取时建议用readAll这种方式读取。即只需要注意一下QTextStream在读数据时,与QDataStream尽量不一样。

2 代码:

#include "mywidget.h"
#include "ui_mywidget.h"
#include<QTextstream>
#include<QFile>
#include<QDebug>
#include<QFileDialog>
#define cout qDebug()<<__FILE__<<":"<<__LINE__    //两个全局宏 打印cout时输出所在的文件和行数

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);

    //调用自定义函数
    writeData();
    //readData();

}

MyWidget::~MyWidget()
{
    delete ui;
}

//利用文本流写数据
void MyWidget::writeData()
{
    //1 创建QFile并新建文件关联  ---data.txt是不存在的 关闭file后电脑创建完毕
    //QFile file("C:/Users/Administrator/Desktop/MyQtCode/day05/03_QTextStream/text.txt");
    QFile file;
    file.setFileName("C:/Users/Administrator/Desktop/MyQtCode/day05/03_QTextStream/text.txt");  //使用新方法创建

    //2 打开文件
    bool ret=file.open(QIODevice::WriteOnly);
    if(ret==false)
    {
        return ;
    }


    //3 文件操作 先将QFile转成数据流 不用QFile直接操作
    QTextStream stream(&file);
    //QTextStream可以指定读写时的编码
    stream.setCodec("UTF-8");

    //4 使用流的文件操作    --往数据流输入数据 对流操作就是对文件操作
    stream<<QString("我笑了")<<100;


    //5 关闭文件
    file.close();

}


//利用文本流读数据
//--不建议以下这种 因为写进时"我笑了"和100被当中一个字符串被读出 a再读出时没有值了 默认赋值0 用readAll这些读
void MyWidget::readData()
{
    //1 创建创建QFile并关联
    QFile file("C:/Users/Administrator/Desktop/MyQtCode/day05/03_QTextStream/text.txt");

    //2 打开文件
    bool ret=file.open(QIODevice::ReadOnly);
    if(ret==false)
    {
        return ;
    }

    //3 文件操作 先将QFile转成数据流 不用QFile直接操作
    QTextStream stream(&file);
    //QTextStream可以指定读写时的编码
    stream.setCodec("UTF-8");

    //4 使用流的文件操作
    QString str;
    int a;
    stream>>str>>a;       //读出数据到变量中 但a的值是0 因为写进时没有空格 250被str当成一个字符串读出
    cout<<str.toUtf8().data()<<a;


    //5 关闭文件
    file.close();
}


//用按钮实现readAll读 不用上面的
void MyWidget::on_pushButton_clicked()
{
    //1 创建创建QFile并关联
    QString path = QFileDialog::getOpenFileName(this,"文件对话框", "./.."  );
    if(path.isEmpty() == true)
    {
        return;
    }
    QFile file;
    file.setFileName(path);

    //2 打开文件
    bool ret = file.open(QIODevice::ReadOnly);
    if(ret == false)
    {
        return;
    }

    //3 文件操作 先将QFile转成数据流 不用QFile直接操作
    QTextStream stream(&file);
    //QTextStream可以指定读写时的编码
    stream.setCodec("UTF-8");

    //4 使用流的文件操作
    QString str = stream.readAll();
    cout<<str.toUtf8().data();

    //5 关闭文件
    file.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值