C/C++ Qt 基本文件读写的基本使用(2种实现)
作者:lyshark 发布时间:2021-09-17 05:15:36
文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能。
Qt文件操作有两种方式,第一种使用QFile类的IODevice读写功能直接读写,第二种是利用 QFile和QTextStream结合起来,用流的方式进行文件读写。
第一种,利用QFile中的相关函数,实现对文件的读写操作,QFile会调用IODevice设备,从而实现文件读写。
QT基本文件读写
通过QFile实现文本文件读写操作.
#include <QCoreApplication>
#include <iostream>
#include <QFile>
#include <QString>
#include <QTextStream>
// 一次读入所有文本
bool ReadFileOnly(const QString &file_path)
{
QFile ptr(file_path);
// 文件是否存在
if(!ptr.exists())
{
return false;
}
// 文件是否打开
/*
ReadOnly 以只读方式打开
WriteOnly 以只写方式打开
ReadWrite 读写方式打开
Append 以追加方式打开
Truncate 以截取方式打开(原有内容被清空)
Text 以文件方式打开
*/
if(!ptr.open(QIODevice::ReadWrite | QIODevice::Text))
{
return false;
}
QString text = ptr.readAll();
std::cout << text.toStdString() << std::endl;
ptr.close();
}
// 追加写入文本
bool WriteFileOnly(const QString &file_path, QString save)
{
// 如果参数为空则返回假
if(file_path.isEmpty() && save.isEmpty())
{
return false;
}
QFile ptr(file_path);
if(!ptr.open(QIODevice::Append | QIODevice::Text))
{
return false;
}
QByteArray str_bytes = save.toUtf8();
ptr.write(str_bytes,str_bytes.length());
ptr.close();
return true;
}
QFile::open() 函数打开文件时需要传递 QIODevice::OpenModeFlag 枚举类型的参数,决定文件以什么方式打开,QIODevice::OpenModeFlag 类型的主要取值如下:
QIODevice::ReadOnly:以只读方式打开文件,用于载入文件。
QIODevice::WriteOnly:以只写方式打开文件,用于保存文件。
QIODevice::ReadWrite:以读写方式打开。
QIODevice::Append:以添加模式打开,新写入文件的数据添加到文件尾部。
QIODevice::Truncate:以截取方式打开文件,文件原有的内容全部被删除。
QIODevice::Text:以文本方式打开文件,读取时“\n”被自动翻译为换行符,写入时字符串结束符会自动翻译为系统平台的编码,如 Windows 平台下是“\r\n”。
这些取值可以组合,例如 QIODevice::ReadOnly | QIODevice::Text 表示以只读和文本方式打开文件。
QTextStream 实现流读写
直接使用流写入,可以使用<< 运算符,方便的写入文本。
#include <QCoreApplication>
#include <iostream>
#include <QFile>
#include <QString>
#include <QTextStream>
#include <QTextCodec>
// 计算文件行数
qint32 get_file_count(const QString &file_path)
{
QFile ptr(file_path);
qint32 count = 0;
if(ptr.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&ptr);
// 自动检测unicode编码,显示中文
in.setAutoDetectUnicode(true);
while(!in.atEnd())
{
QString line = in.readLine();
std::cout << line.toStdString() << std::endl;
count = count +1;
}
return count;
}
return 0;
}
// 追加写入数据
bool write_file_stream(const QString &file_path, QString save)
{
QFile ptr(file_path);
if(ptr.open(QIODevice::Append | QIODevice::Text))
{
QTextStream in(&ptr);
in << save;
}
ptr.close();
return true;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 设置编码
QTextCodec *codec = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForLocale(codec);
// 流写入
write_file_stream("d://test.txt","hello lyshark");
write_file_stream("d://test.txt","你好,世界");
// 取文本长度
qint32 count = get_file_count("d://test.txt");
std::cout << "line = > " << count << std::endl;
return a.exec();
}
来源:https://www.cnblogs.com/LyShark/p/15433616.html


猜你喜欢
- 抽象类和抽象方法常用知识点:(1)抽象类作为被继承类,子类必须实现抽象类中的所有抽象方法,除非子类也为抽象类。也就是说,如果子类也为抽象类,
- 这是自己写的简单的解析pcap文件,方便读取pcap文件,大家参考使用吧InputStream is = DataParser.class.
- 也许是本人不才,初识Maven时,被各种不明所以的教程搞得一头雾水,而在后来的使用中,我发现Maven大部分功能没有想象的那么困难。本片文章
- 记得老师讲课的时候,经常会用PPT遥控翻页笔来遥控幻灯片来给我们讲课,当时觉得非常有趣,由于这段时间接触了VSTO相关的开发,了解到了Off
- 开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教。1.Student
- 引言第一眼看到这个题目,我相信大家都会脑子里面弹出来一个想法:这不都是 Spring 的注解么,加了这两个注解的类都会被最终封装成 Bean
- 前面讲述了使用POI导出Word文件和读取Excel文件,这两个例子都相对简单,接下来要讲述的使用POI导出Excel文件要复杂得多,内容也
- 第一次是接触Lambda表达式是在TypeScript中(JavaScript的超集中),当时是为了让TypeScript的this方法外而
- 一、问题描述平时我们在完成某些数据的入库后,发布了一个事件,此时使用的是@EventListener,然后在这个事件中,又去对刚才入库的数据
- 前言日常开发中常见的文件格式有pdf,word,Excel,PPT,Html,txt,图片等。pdf,Html,txt,图片这种实现在线预览
- 摘要:最近在做任务管理,任务可以无限派生子任务且没有数量限制,前端采用Easyui的Treegrid树形展示控件。一、遇到的问题获取全部任务
- Apache Shiro官网:https://shiro.apache.org/spring-boot.html.一、依据官网快速搭建Qui
- 技术看点 WinForm自定义控件的使用自定义控件gif动画的播放需求及效果又来一波 C# GDI自定义控件show 。这个控件已
- 由 CardLayout 类实现的布局管理器称为卡片布
- Java 多文件加密压缩 添加文件加密压缩工具包依赖<!-- zip4j压缩工具 --> <dependenc
- 前言最近我在项目写了几万行代码,小伙伴担心会让程序启动速度变慢,所以本渣就来做测试。 本渣使用了代码创建器,创建了 1000 个垃圾文件,这
- delegate double ProcessDelegate(double param1, double param2); &n
- 对变量延迟初始化Kotlin语言有许多特性,包括变量不可变,变量不可为空,等等。这些特性都是为了尽可能地保证程序安全而设计的,但是有些时候这
- Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。Control.BeginIn
- 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8一、发布REST服务1、IDEA新建一个名称为r