Qt文件读写操作
原文地址:https://www.cnblogs.com/flowingwind/p/8336159.html
QFile Class
1.read读文件
- 加载文件对象 QFile file("文件地址");
- 打开加载的文件file.open(打开方式);
- 操作文件
- 关闭打开的文件file.colse();
![](https://common.cnblogs.com/images/copycode.gif)
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();
}
![](https://common.cnblogs.com/images/copycode.gif)
2.wirte写文件
- 以纯文本的形式读取要保存文件到QString对象 //ui->text_e->toPlainText();
- 创建QFile 对象保存文件
- 打开QFile对象
- 写入文件操作
- 关闭打开的文件;
![](https://common.cnblogs.com/images/copycode.gif)
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();
}
![](https://common.cnblogs.com/images/copycode.gif)
细节优化处理
- read文件添加读取文件选择项 QFileDialog::getOpenFileName();
- 打开文件是否成功的判断;
- 按行读取文件,可控制读取行数与每行字符数;
- write文件创建保存路径QFileDialog::getSaveFileName();
![](https://common.cnblogs.com/images/copycode.gif)
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();
}
![](https://common.cnblogs.com/images/copycode.gif)
各编码转换
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
获取文件信息;
![](https://common.cnblogs.com/images/copycode.gif)
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();
![](https://common.cnblogs.com/images/copycode.gif)
二、文本流与数据流
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,临时文件常用于大数据传递或者进程间通信场合。
![](https://common.cnblogs.com/images/copycode.gif)
QTemporaryFile tempFile;
if( tempFile.open() )
{
tempFile.write("D.T.Software");
tempFile.close();
}
![](https://common.cnblogs.com/images/copycode.gif)
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使用方法如下:
![](https://common.cnblogs.com/images/copycode.gif)
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;
}
![](https://common.cnblogs.com/images/copycode.gif)
2、QFileSystemWatcher
QT中预定义了用于监控文件和目录变化的类QFileSystemWatcher,
QFileSystemWatcher主要功能如下:
A、能够监控特定目录和文件的状态
B、能够同时对多个文件和目录进行监控
C、当目录或文件发生改变时触发信号
D、通过信号与槽的机制捕捉信号并做出响应
通常要使用QFileSystemWatcher需要自定义文件监视类。
Qt文件读写操作的更多相关文章
- 一篇文章快速搞懂Qt文件读写操作
导读:Qt当中使用QFile类对文件进行读写操作,对文本文件也可以与QTextStream一起使用,这样读写操作会更加简便.QFileInfo可以用来获取文件的信息.QDir可以用于对文件夹进行操作. ...
- QT文件读写操作笔记
补一下这部分的笔记 简单的东西也记一下 操作系统一般都会提供一些列的标准对话框,如文件选择.字体选择.颜色选择等,这些标准对话框为应用层序提供了一致的观感.Qt对这些标准对话框都定义了相关的类,如:Q ...
- c语言文件读写操作总结
C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...
- [转]Android - 文件读写操作 总结
转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...
- PHP文件读写操作之文件写入代码
在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...
- Java 字节流实现文件读写操作(InputStream-OutputStream)
Java 字节流实现文件读写操作(InputStream-OutputStream) 备注:字节流比字符流底层,但是效率底下. 字符流地址:http://pengyan5945.iteye.com/b ...
- Java 字符流实现文件读写操作(FileReader-FileWriter)
Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...
- python(三)一个文件读写操作的小程序
我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...
- 实现动态的XML文件读写操作
实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...
随机推荐
- 如何配置php session使用redis集群
本实例基于phpredis 2.2.8,支持集群处理,php5.3及以上. 1.页面修改: ini_set('session.save_handler', 'rediscluster'); ini_s ...
- docker postgres 导出导入数据
导出 -s 选项用来只导出表结构,而不会导出表中的数据 -t 选项用来指定要导出的数据库表 格式:docker exec -ti 容器名 pg_dump -U 用户名 -s -t table_n ...
- js注意点
1.在JS中:var a=''; 则 a==0或a==false 结果都为true; 如果是“====” 则为false
- .NET Core AvaloniaUI实现多语言国际化
AvaloniaUI是一个基于.Net Core的跨平台桌面程序UI框架,如果使用AvaloniaUI有多语言国际化的朋友可以参考我这篇文章: 这篇文章可以帮助你: 根据用户系统设置的语言改变UI显示 ...
- Go语言的成功也预示着Rust的成功【转】
从整体的角度来看Go,很难理解他是怎么取得这么大的成功的.从理论的角度上来说Go是一门非常糟糕的语言,就算是和C++或者Ada之类旧语言相比也是这样. 从整体的角度来看Go,很难理解他是怎么取得这么大 ...
- 进入恢复模式(Recovery HD)
进入恢复模式(Recovery HD) 1,选中要启动的虚拟机,随后点击VM菜单的启动按钮后面向下箭头,随后点击菜单项”打开电源时进入固件“. 2,在虚拟机里面,用上下键移动到”Enter setup ...
- django同一个项目中连接多个数据库
一.场景与思路 同一个项目中需要连接多个数据库. 二.代码 代码中主要是三个部分,settings.models以及自己写的一个类. 1.自己写的文件:database_app_router.py ...
- 隐藏Apache版本号及版本敏感信息
在安装软件前,我们需要隐藏软件的版本号及版本其他信息,这样就大大提高了安全指数. 只隐藏版本号: 我们在主配置文件里:httpd.conf [root@bqh- ~]# curl -i bbs.bqh ...
- C语言基础知识-数据类型
C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...
- 右键tomcat找不到项目:There are no resources that can be added or removed from the server.
右键Add and Remove找不到项目,会出现下面这个弹框: 之后在项目文件夹上右键(Java Build Path中引用的jdk的版本也需要和下面这个Project Facets中配置的java ...