QT5 文件读写操作
QFile Class
1.read读文件
- 加载文件对象 QFile file("文件地址");
- 打开加载的文件file.open(打开方式);
- 操作文件
- 关闭打开的文件file.colse();
void Widget::on_pushButton_clicked() {QFile file("L:/qtpro/_qtApp/text/t.txt");file.open(QIODevice::ReadOnly | QIODevice::Text);QByteArray t = file.readAll();ui->text_r->setText(QString(t));file.close(); }
2.wirte写文件
- 以纯文本的形式读取要保存文件到QString对象 //ui->text_e->toPlainText();
- 创建QFile 对象保存文件
- 打开QFile对象
- 写入文件操作
- 关闭打开的文件;
void Widget::on_pushButton_2_clicked() {QString e = ui->text_e->toPlainText();QFile file("L:/qtpro/_qtApp/text/e.txt");file.open(QIODevice::WriteOnly | QIODevice::Text);file.write(e.toUtf8());file.close(); }
细节优化处理
- read文件添加读取文件选择项 QFileDialog::getOpenFileName();
- 打开文件是否成功的判断;
- 按行读取文件,可控制读取行数与每行字符数;
- write文件创建保存路径QFileDialog::getSaveFileName();
void Widget::on_pushButton_clicked() {QFile file;QString f = QFileDialog::getOpenFileName(this, QString("选择文件"), QString("/"),QString("TEXT(*.txt)"));file.setFileName(f);if(file.open(QIODevice::ReadOnly | QIODevice::Text)){QByteArray t ;while(!file.atEnd()){t += file.readLine();}ui->text_r->setText(QString(t));file.close();} }void Widget::on_pushButton_2_clicked() {QString e = ui->text_e->toPlainText();QFile file;file.setFileName(QFileDialog::getSaveFileName(this, QString("保存路径"), QString("/"),QString("TEXT(*.txt)")));file.open(QIODevice::WriteOnly | QIODevice::Text);file.write(e.toUtf8());file.close(); }
各编码转换
QString -> QByteArray QString.toUtf8();
QByteArray -> std::string QByteArray.toStdString();
std::string -> char * string.date();
常用静态函数:
QFileDialog::getOpenFileName() //获取指定文件路径名返回QString
QFileDialog::getExistingDirectory() //获取指定路径返回QString
QFileDialog::getSaveFileName() //获取指定保存路径名返回QString
辅助配合使用的类:
QFileInfo class
获取文件信息;
QFileInfo类用于读取文件的属性信息QFile file(f);QFileInfo info(file);qDebug() << info.exists();qDebug() << info.isFile();qDebug() << info.isReadable();qDebug() << info.isWritable();qDebug() << info.created();qDebug() << info.lastRead();qDebug() << info.lastModified();qDebug() << info.path();qDebug() << info.fileName();qDebug() << info.suffix();qDebug() << info.size();
二、文本流与数据流
QT中将文件分为文本文件和数据文件,文本文件内容是可读的文本字符,数据文件的内容是二进制数据。
QFile直接支持文本文件和数据文件的操作,主要函数接口如下:
- qint64 read( char * data, qint64 maxSize) //数据流读取
- QByteArray read( qint64 maxSize) //文本流方式读取
- QByteArray readAll() //文本流方式读取
- QByteArray readLine()//文本流方式读取
- qint64 write(const char * data, qint64 maxSize)
- qint64 write(const QByteArray & byteArray)
为了简化文本文件和数据文件的读写操作,QT提供了QTextStream和QDataStream辅助类。QTextStream可将写入的数据全部转换为可读文本,QDataStream可将写入的数据根据类型转换为二进制数据。
QTemporaryFile是QT中的临时文件操作类,用来安全创建全局唯一的临时文件,QTemporaryFile对象销毁时对应的临时文件将被删除,临时文件的打开方式为QIODevice::ReadWrite,临时文件常用于大数据传递或者进程间通信场合。
QTemporaryFile tempFile; if( tempFile.open() ) { tempFile.write("D.T.Software");tempFile.close(); }
QDataStream Class
数据流操作文件:
创建流对象 QDataStream date;
int a= xxxx;
string b = "xxxxxxxxx" ;
将数据存在流中 date >> a >> b;
int aa;
string bb;
从流中取出数据 date << aa << bb;
QDataStream在不同的QT版本中数据流文件格式可能是不同的,如果数据流文件需要在不同版本的QT程序间传递时需要考虑版本问题。
void setVersion(int v)
int version() const
QTextStream Class
文本方式操作文件:
创建流对象 QTextStream date;
date.setCodec();支持对文件读取编码设置(有效解决乱码问题)
QBuffer
QBuffer类为QByteArray提供QIODevice接口。
目前先理解为一个创建一个缓存文件;
QT中预定义了缓冲区的类QBuffer,可以将缓冲区看成一种特殊的IO设备,文件流辅助类可以直接用于操作缓冲区。QBuffer缓冲区写入和读取的数据必须是同一种数据类型,不能混合多种数据类型。
QBuffer的使用场合:
A、线程间不同类型的数据传递
B、缓存外部设备中的数据返回
C、数据读取速度小于写入速度
总结:
读写操作主要方法有read();readAll();readline(),write();
附录:
目录操作
1、QDir
QT中提供了目录操作类QDir,QDir功能如下:
A、目录分隔符统一使用’/’
B、能够对目录进行任意操作(创建、删除、重命名)
C、能够获取指定目录中的所有条目(文件和文件夹)
D、能够使用过滤字符串获取指定条目
E、能够获取系统中的所有根目录
QDir使用方法如下:
QDir dir;QString path("../qt/test");if(!dir.exists()){dir.mkdir(path);}else{dir.cd(path);QStringList list = dir.entryList();for(int i = 0; i < list.count(); i++){qDebug() << list[i];}}//计算文件大小 unsigned int FileSize(QString path) {QFileInfo info(path);unsigned int ret = 0;if(info.isFile()){ret = info.size();}else if(info.isDir()){QDir dir(path);QFileInfoList list = dir.entryInfoList();for(int i = 0; i < list.count(); i++){if((list[i].fileName() != ".") && (list[i].fileName() != "..")){ret += FileSize(list[i].absoluteFilePath());}}}return ret; }
2、QFileSystemWatcher
QT中预定义了用于监控文件和目录变化的类QFileSystemWatcher,
QFileSystemWatcher主要功能如下:
A、能够监控特定目录和文件的状态
B、能够同时对多个文件和目录进行监控
C、当目录或文件发生改变时触发信号
D、通过信号与槽的机制捕捉信号并做出响应
通常要使用QFileSystemWatcher需要自定义文件监视类。
QT5 文件读写操作相关推荐
- java大文件读写操作
转载自:http://blog.csdn.net/akon_vm/article/details/7429245 RandomAccessFile RandomAccessFile是用来访问那些保存数 ...
- C++ builder 的文件读写操作总结
C++ builder 的文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1.基于 ...
- unity webgl读写txt文件_python Files文件读写操作
今天学习python的Files文件读写操作,并记录学习过程欢迎大家一起交流分享. 首先新建一个文本文件test.txt,内容如下: hello worldhello youhello mehello ...
- java文件读写操作类
借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...
- OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作
OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作 一.Write_XML_and_YAML_File(写入XML) #include <opencv2/opencv ...
- Python 文件读写操作-Python零基础入门教程
目录 一.Python 文件的打开 open 二.Python 文件的关闭 close 三.Python 文件的读取 read 1.read 函数 2.readline 函数 3.readlines ...
- 【转】Android - 文件读写操作 总结
Android - 文件读写操作 总结 原文出处:http://blog.csdn.net/ztp800201/article/details/7322110 在android中的文件放在不同位置,它 ...
- php中文件读写总结,PHP中文件读写操作
PHP中文件读写操作 PHP中提供了一系列的I/O函数,能简捷地实现我们所需要的功能,包括文件系统操作和目录操作(如"复制[copy]").下面给大家介绍的是基本的文件读写操作:( ...
- C/C++ 文件读写操作总结
C/C++ 文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1.基于C的文件操作: ...
最新文章
- setup.py安装
- poj3617 贪心
- 计算机原理与基础 —— (皇帝身边的小太监----寄存器)
- python推荐淘宝物美价廉商品 2.0
- oracle中的java无法_Java无法连接oracle
- .net core连接MongoDB
- C++语言基础 —— STL —— 容器与迭代器 —— vector
- Windows和Mac安装JDK及环境变量配置
- Bootstrap 排版地址
- spring的路径匹配问题
- 荣耀赵明 “Diss” 5G 手机;甲骨文创始人埃里森:Uber 一文不值;Chrome 77 发布 | 极客头条...
- 聊聊 | 他在Google Play安全奖励计划贡献榜单上排名第一
- 在pytorch中expand_dim
- mybatis源码分析详解
- 大数据决策支持的优势
- PS常用快捷键(持续更新)
- 在线将PDF极速转换为图片
- 高考数学47分学计算机,从57分到高考数学131分,4个月的时间我竟创造了这个传奇!...
- puppet单机模型
- 如何优化在搜索引擎上的友好度
热门文章
- CSP认证201412-4	最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树
- bootstrap操作mysql数据库_前后端连接(BootStrap_MySQL_MyEclipse)
- mysql 日志的存放形式_mysql日志详细解析
- python构造和析构_python魔法方法 构造和析构实例讲解
- html中隔行的代码,js+css 控制表格隔行变色与单行高亮的代码
- C语言鹦鹉学舌1,鹦鹉学舌真是简单的学舌吗?为什么他们清晰的知道在哪用哪些词...
- java简单通讯录的实现02person类_Java中Math类的简单介绍
- Linux下CMake简明教程(九) 添加控制选项
- php把字符串变为数组_php将字符串转换为数组
- java自定义类怎么比大小_实战:Java 扑克牌比较游戏