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();
}