Qt学习笔记--文件读写(QFile、QDataStream、QTextStream)
一、QFile
头文件:
#include<QFile>
#include<QFileDialog>
QFile 读文件
基本操作
通过按钮打开文件对话框
void Widget::on_pushButton_clicked()
{QString path =QFileDialog::getOpenFileName(this,"open","../","TXT(*.txt)");if(path.isEmpty()==false){//文件对象QFile file(path);//打开文件,只读方式打开bool isOk=file.open(QIODevice::ReadOnly);if(isOk==true){//读文件 默认只utf8编码QByteArray arr=file.readAll();//显示到编辑区//ui->textEdit->setText(QString(arr));ui->textEdit->setText(arr);}//关闭文件file.close();}
}
这里为什么要用QByteArray 类呢因为是readall函数返回值决定
翻译:从设备中读取所有剩余数据,并将其作为字节数组返回。
该函数没有报告错误的方法;返回一个空的QByteArray可能意味着当前没有可供读取的数据,或者发生了错误。
QByteArray简介:
QByteArray类提供了一个字节数组。
QByteArray可以用来存储原始字节(包括’\0’)和传统的8位’\0’结尾的字符串。使用QByteArray要比使用const char *方便得多。在后台,它总是确保数据后面有一个’\0’结束符,并使用隐式共享(写时复制)来减少内存使用,避免不必要的数据复制。
注意
这里的
//读文件 默认UFT-8编码
QByteArray arr=file.readAll();
打开txt文件时会出现乱码
另存为UTF-8后
再打开就可以了
另外
还有一种一行一行的读文件方式
while(file.atEnd()==false){//读行arr +=file.readLine();}ui->textEdit->setText(arr);
也是默认读UTF8格式的
QFile写文件
void Widget::on_pushButton_2_clicked()
{QString path=QFileDialog::getSaveFileName(this,"save","../","TXT(*.txt)");if(path.isEmpty()==false){QFile file;//创建文件对象file.setFileName(path);//打开文件,只写方式bool isOk=file.open(QIODevice::WriteOnly);//判断是否打开if(isOk==true){//获取编辑区内容QString str=ui->textEdit->toPlainText();//写文件//把QString->QByteArrayfile.write(str.toUtf8());//特别是适用于有中文的情况 }file.close();}}
根据write()函数
其他转换方式;
//转换为本地平台编码
file.write(str.toLocal8Bit());//QString->c++ string->char*
file.write(str.toStdString().data());//QString->QByteArray->char*
file.write(str.toUtf8().data());
保存到当前项目Debug文件上一级命名“测试.txt”
二、QDataStream数据流文件
头文件
#include<QDataStream>
QDataStream写
void Widget::writeData()
{QFile file("../test.txt");//打开文件bool isOk=file.open(QIODevice::WriteOnly);if(isOk==true){QDataStream stream(&file);//创建文件流,和file文件关联//往数据流输入数据,相当于往文件里写数据stream<<QString("咸鱼四号突突突")<<250;}file.close();
}
在构造函数调用读写后
打开test.txt文件后,你会发现文件乱码,可以通过toLocal8Bit()转成本地编码
(但是再读的时候就要根据编码转换比较麻烦)
这里暂且不管格式是什么。只要能通过读函数读出来就行
QDataStream读
void Widget::readData()
{QFile file("../test.txt");//打开文件bool isOk=file.open(QIODevice::ReadOnly);if(isOk==true){//往数据流读数据,相当于往文件里读数据QDataStream stream(&file);//读的时候,按写的顺序QString str;int a;stream>>str>>a;qDebug()<<str.toUtf8().data()<<a;//转中文}file.close();}
三、QTextStream
头文件
#include<QTextStream>
QTextStream写
----------------------------.h----------------------------------
public:Widget(QWidget *parent = nullptr);~Widget();void writeData();void readData();----------------------------.cpp--------------------------------
void Widget::writeData()
{QFile file;file.setFileName("../demo.txt");bool isOk=file.open(QIODevice::WriteOnly);if(true==isOk){QTextStream stream(&file);//默认本地编码,也可以指定编码stream.setCodec("GB18030");stream <<QString("突突突!")<<250;file.close();}
}
QTextStream读
读文件时不要像QDataStream一样,因为QTextStream对读取的文件没有辨别类型的功能输出的只是字符串,做不到字符数字分离所以要使用下列方式:
QString path=QFileDialog::getOpenFileName(this,"open","../");if(path.isEmpty()==false){QFile file;file.setFileName(path);bool isOk=file.open(QIODevice::ReadOnly);if(true==isOk){QTextStream stream(&file);//指定编码stream.setCodec("UFT-8");QString str=stream.readAll();ui->textEdit->setText(str);file.close();}}
四、QFileInfo读取文件信息
头文件
#include<QFileInfo>
由于created返回值是QDataTime
所以还要包含头文件#include<QDateTime>
需要输出#include<QDebug>
用法
几个简单的函数,更多翻阅帮助文档
//获取文件信息QFileInfo info(path);qDebug()<<"文件名称"<<info.fileName();qDebug()<<"文件后缀"<<info.suffix();qDebug()<<"文件大小"<<info.size();qDebug()<<"文件创建时间"<<info.created().toString("yyyy-MM-dd hh:mm:ss");
Qt学习笔记--文件读写(QFile、QDataStream、QTextStream)相关推荐
- Linux学习笔记 文件读写小细节
open 函数的flag int open(const *pathname, int falg, int parm) O_RDONLY //文件只读O_WRONLY //文件只写O_CREAT //不 ...
- python试卷生成_Python学习笔记文件读写之生成随机的测试试卷文件
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- Qt学习笔记之文件处理
Qt提供了通用的文件处理类QFile和处理文本的QTextStream类和处理二进制数据的QDataStream类,这些流操作极大地方便了对文件的督促存储.对文件信息和目录进行操作的类是QfileIn ...
- QT学习笔记(摘抄)
QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...
- QT学习笔记之对话框
QT学习笔记之对话框 对话框是一种用户界面(窗口),它的主要功能是输出信息和接收用户的输入.在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互. 1) 模式对话框:用户只能与 ...
- QT学习笔记(五):Qt5的8种标准对话框示例
QT学习笔记(五):Qt5的8种标准对话框示例 前言 实例展示 1.颜色对话框 2.文件对话框 3.字体对话框 4.输入对话框 5.消息对框 6.进度对话框 7.错误信息对话框 8.向导对话框. 前言 ...
- Qt学习笔记,Qt国际化
Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\ ...
- Qt学习笔记之MySQL数据库
一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...
- Qt学习笔记之数据库
一.数据库简介 1.1.数据和数据库(DB) 用计算机进行数据处理,首先就要把信息以数据形式存储到计算机中,故数据是可以被计算机接受和处理的符号.根据所表示的信息特征不同,数据有不同的类别,如数字.文 ...
最新文章
- Android Animation (安卓动画)概念简介
- 不可错过的java面试博客之java集合篇
- c 语言 string库,C语言编程必备资料(包括库函数,string类,stl库模板).docx
- svm预测结果为同一个值_实战:用SVM算法进行乳腺癌预测
- IO流的练习5 —— 读取文件中的字符串,排序后写入另一文件中
- internal java compiler error_Java异常处理总结
- mysql安装图解及报错解决
- mysql隐藏文件一定要删除彻底
- 马尔可夫链、隐马尔科夫模型、贝叶斯网络、因子图
- SCSI设备IO过程:磁盘上线与IO过程
- EBS 个性化:个性化设置界面
- Kafka彻底删除topic详解
- 联想小新pro16无法识别网卡MT7921的问题
- matlab画中国地图深浅,matlab绘制中国地图
- C# 汉字转拼音 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母...
- 咸鱼Micropython— 标准库
- cannal 启动异常(show master status‘ has an error pls check. you need (at least one of) the SUPER,REPLI)
- P1598垂直柱状图
- 计算机网络(6)应用层
- 黏菌算法(Slime Mould Algorithm,SMA)