一、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)相关推荐

  1. Linux学习笔记 文件读写小细节

    open 函数的flag int open(const *pathname, int falg, int parm) O_RDONLY //文件只读O_WRONLY //文件只写O_CREAT //不 ...

  2. python试卷生成_Python学习笔记文件读写之生成随机的测试试卷文件

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  3. Qt学习笔记之文件处理

    Qt提供了通用的文件处理类QFile和处理文本的QTextStream类和处理二进制数据的QDataStream类,这些流操作极大地方便了对文件的督促存储.对文件信息和目录进行操作的类是QfileIn ...

  4. QT学习笔记(摘抄)

    QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...

  5. QT学习笔记之对话框

    QT学习笔记之对话框 对话框是一种用户界面(窗口),它的主要功能是输出信息和接收用户的输入.在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互. 1)       模式对话框:用户只能与 ...

  6. QT学习笔记(五):Qt5的8种标准对话框示例

    QT学习笔记(五):Qt5的8种标准对话框示例 前言 实例展示 1.颜色对话框 2.文件对话框 3.字体对话框 4.输入对话框 5.消息对框 6.进度对话框 7.错误信息对话框 8.向导对话框. 前言 ...

  7. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  8. Qt学习笔记之MySQL数据库

    一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...

  9. Qt学习笔记之数据库

    一.数据库简介 1.1.数据和数据库(DB) 用计算机进行数据处理,首先就要把信息以数据形式存储到计算机中,故数据是可以被计算机接受和处理的符号.根据所表示的信息特征不同,数据有不同的类别,如数字.文 ...

最新文章

  1. Android Animation (安卓动画)概念简介
  2. 不可错过的java面试博客之java集合篇
  3. c 语言 string库,C语言编程必备资料(包括库函数,string类,stl库模板).docx
  4. svm预测结果为同一个值_实战:用SVM算法进行乳腺癌预测
  5. IO流的练习5 —— 读取文件中的字符串,排序后写入另一文件中
  6. internal java compiler error_Java异常处理总结
  7. mysql安装图解及报错解决
  8. mysql隐藏文件一定要删除彻底
  9. 马尔可夫链、隐马尔科夫模型、贝叶斯网络、因子图
  10. SCSI设备IO过程:磁盘上线与IO过程
  11. EBS 个性化:个性化设置界面
  12. Kafka彻底删除topic详解
  13. 联想小新pro16无法识别网卡MT7921的问题
  14. matlab画中国地图深浅,matlab绘制中国地图
  15. C# 汉字转拼音 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母...
  16. 咸鱼Micropython— 标准库
  17. cannal 启动异常(show master status‘ has an error pls check. you need (at least one of) the SUPER,REPLI)
  18. P1598垂直柱状图
  19. 计算机网络(6)应用层
  20. 黏菌算法(Slime Mould Algorithm,SMA)

热门文章

  1. 用夜神安卓模拟器做Android开发
  2. windowsXP源代码下载磁力链接,仅做保存!
  3. 一个用JAVA写的画图程序
  4. 让div在页面居中(滚动条滚动时也居中)
  5. 关于鸿蒙开发系统组件的摘抄及运用1
  6. 用友NC 漏洞汇总(转载)
  7. C++/java设计模式汇总
  8. 年薪40W+,2018年程序员如何跳出35岁“失业”怪圈?
  9. Redis基础常用命令入门
  10. 花木兰荣耀典藏皮肤特效一览 花木兰九霄神辉值得入手吗