首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Qt file文件操作详解

Qt file文件操作详解

作者头像
破晓的历程
发布于 2025-05-15 01:08:22
发布于 2025-05-15 01:08:22
17902
代码可运行
举报
文章被收录于专栏:破晓破晓
运行总次数:2
代码可运行

1.引言

很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件等等,甚至某些应用程序的就是为了操作文件,像WPS Office。基于此Qt框架中专门提供了对文件操作的类:QFile。

2.QFile文件操作

QFile类支持对文件进行读取和写入,删除,重命名,拷贝等常见的文件操作,它既可以操作文本文件,也可以用来操作二进制文件。

在Qt代码中我们使用QFIle类,需要先引入QFile的头文件:#include <QFile>。常见QFile类对象时,常见的构造函数有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QFile()
QFile(QObject *parent)

参数parent 用来指定要操作的目标文件,包含文件的存储目录和文件名,存储路径可以使用绝对地址(比如"D:/Demo/text.txt")或者相对路径(比如"./Demo/text.txt")。路径中的分隔符要用"/"表示。

通常情况下,我们一般调用第二个构造函数来直接指明要操作的文件,对于第一个构造函数而言,我们还需要调用 setFileName()函数来指明要操作的文件。

与C++的读写规则一样,在对文件进行相关操作之前,我们需要先打开文件,打开文件我们使用 open函数。常用的语法格式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool QFile::open(OpenMode Mode);

Mode参数表示不同的打开方式,下列罗列了参数的可选值和及其不同的含义:

打开模式

含义

QIODevice::ReadOnly

以只读模式打开文件。

QIODevice::WriteOnly

以只写模式打开文件。如果文件不存在,将创建新文件;如果文件已存在,其内容将被清空。

QIODevice::ReadWrite

以读写模式打开文件。

QIODevice::Append

以追加模式打开文件,写入的数据将追加到文件末尾,原有内容保留。

QIODevice::Truncate

打开文件时清空其内容。通常与 WriteOnly 或 ReadWrite 一起使用。

QIODevice::Text

在文本模式下打开文件,处理不同平台的行结束符(如将 Windows 的 \r\n 转换为 \n)。

QIODevice::Unbuffered

以非缓冲模式打开文件,数据将直接写入磁盘而不经过缓冲区。

根据需要我们可以一次性选择多个值,值和值之前使用 |来进行分割,比如:

QIODevice::ReadOnly|QIODevice::Text表示只允许对文件进行读操作,读取文件时,会将行尾结束符转换为 ‘\n’; QIODevice::WriteOnly|QIODevice::Text表示只允许对文件进行写操作,将数据写入文件时,会将行尾结束符转换为本地格式; QIODevice::ReadWrite|QIODevice::Text| QIODevice::Append

但选择的多个值之前不能相互冲突,比如比如 Append 和 Truncate 不能同时使用。

如果文件成功打开,open() 函数返回 true,否则返回 false。

QFile 类提供了很多功能实用的方法,可以快速完成对文件的操作,下表列举了常用的一些:

qint64 QFile::size() const

获取当前文件的大小。对于打开的文件,该方法返回文件中可以读取的字节数。

bool QIODevice::getChar(char *c)

从文件中读取一个字符,并存储到 c 中。读取成功时,方法返回 true,否则返回 false。

bool QIODevice::putChar(char c)

向文件中写入字符 c,成功时返回 true,否则返回 false。

QByteArray QIODevice::read(qint64 maxSize)

从文件中一次性最多读取 maxSize 个字节,然后返回读取到的字节。

qint64 QIODevice::read(char *data, qint64 maxSize)

从文件中一次性对多读取 maxSize 个字节,读取到的字节存储到 data 指针指定的内存控件中。该方法返回成功读取到的字节数。

QByteArray QIODevice::readAll()

读取文件中所有的数据。

qint64 QIODevice::readLine(char *data, qint64 maxSize)

每次从文件中读取一行数据或者读取最多 maxSize-1 个字节,存储到 data 中。该方法返回实际读取到的字节数。

qint64 QIODevice::write(const char *data, qint64 maxSize)

向 data 数据一次性最多写入 maxSize 个字节,该方法返回实际写入的字节数。

qint64 QIODevice::write(const char *data)

将 data 数据写入文件,该方法返回实际写入的字节数。

qint64 QIODevice::write(const QByteArray &byteArray)

将 byteArray 数组中存储的字节写入文件,返回实际写入的字节数。

bool QFile::copy(const QString &newName)

将当前文件的内容拷贝到名为 newName 的文件中,如果成功,方法返回 true,否则返回 false。 copy 方法在执行复制操作之前,会关闭源文件。

bool QFile::rename(const QString &newName)

对当前文件进行重命名,新名称为 newName,成功返回 true,失败返回 false。

bool QFile::remove()

删除当前文件,成功返回 true,失败返回 false。

3.演示示例

3.1实验一

演示了 QFile 类读写文本文件的过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{
    //创建 QFile 对象,同时指定要操作的文件
    QFile file("D:/demo.txt");
    //对文件进行写操作
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text)){
        qDebug()<<"文件打开失败";
    }
    //向文件中写入两行字符串
    file.write("hello\r\n");
    file.write("world");
    //关闭文件
    file.close();

    //重新打开文件,对文件进行读操作
    if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){
        qDebug()<<"文件打开失败";
    }
    //每次都去文件中的一行,然后输出读取到的字符串
    char * str = new char[100];
    qint64 readNum = file.readLine(str,100);
    //当读取出现错误(返回 -1)或者读取到的字符数为 0 时,结束读取
    while((readNum !=0) && (readNum != -1)){
        qDebug() << str;
        readNum = file.readLine(str,100);
    }
    file.close();
    return 0;
}
3.2实验二【演示】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{
    //指定要写入文件的数据
    qint32 nums[5]={1,2,3,4,5};
    //写入文件之前,要将数据以二进制方式存储到字节数组中
    QByteArray byteArr;
    byteArr.resize(sizeof(nums));
    for(int i=0;i<5;i++){
        //借助指针,将每个整数拷贝到字节数组中
        memcpy(byteArr.data()+i*sizeof(qint32),&(nums[i]),sizeof(qint32));
    }
    //将 byteArr 字节数组存储到文件中
    QFile file("D:/demo.dat");
    file.open(QIODevice::WriteOnly);
    file.write(byteArr);
    file.close();
    //再次打开文件,读取文件中存储的二进制数据
    file.open(QIODevice::ReadOnly);
    QByteArray resArr = file.readAll();
    //输出读取到的二进制数据
    qDebug()<<"resArr: "<<resArr;
    //将二进制数据转化为整数
    char* data = resArr.data();
    while(*data){
        qDebug() << *(qint32*)data;
        data += sizeof(qint32);
    }
    return 0;
}

执行程序,demo.dat 文件中会存储 {1,2,3,4,5} 这 5 个整数的二进制形式,同时输出以下内容:

image-20250514104431780
image-20250514104431780

4.QFile+QTextStream

与单独使用QFile类相比,QTextStream类提供了很多读写文件相关的方法,还可以设定写入到文件的数据格式,比如对齐方式,写入数据是否带前缀等等。

使用QTextStream类之前,程序中需要先引入 头文件。QTextStream提供了很多构造方法,常用的有

am

与单独使用QFile类相比,QTextStream类提供了很多读写文件相关的方法,还可以设定写入到文件的数据格式,比如对齐方式,写入数据是否带前缀等等。

使用QTextStream类之前,程序中需要先引入 头文件。QTextStream提供了很多构造方法,常用的有

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
基于 IBTrACS数据的台风路径快速可视化
关注我获取更多学习资料,第一时间收到我的Python学习资料,也可获取我的联系方式沟通合作
用户11172986
2025/03/27
2970
基于 IBTrACS数据的台风路径快速可视化
如何以峰峦图展示降水数据
降水数据是气象学中一个重要的指标,它对于了解和预测天气变化非常关键。在本期中,我们将使用 joypy 库来进行降水数据的可视化,展示降水的变化趋势和分布情况。
用户11172986
2024/06/20
1710
如何以峰峦图展示降水数据
一句代码!将气象数据可视化为生动的GIF动画
在气象学的世界里,数据不仅仅是冰冷的数字,它们是自然界中风、云、雨、雪的直观反映。随着技术的发展,我们不仅能够收集到更加详尽的气象数据,而且还能以更加直观的方式分享这些信息。对于气象爱好者和博主来说,能够将复杂的气象模式转换成易于理解且吸引人的视觉内容,是一种既有趣又具挑战性的技能。
用户11172986
2024/07/16
2550
一句代码!将气象数据可视化为生动的GIF动画
雷达系列:两种方法将气象雷达数据转为易处理的格式
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/09/12
5020
雷达系列:两种方法将气象雷达数据转为易处理的格式
雷达系列:两种基于雷达基数据绘制雷达CAPPI图的方式
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/09/20
5611
雷达系列:两种基于雷达基数据绘制雷达CAPPI图的方式
​雷达系列:必须更新!测试cinrad最新更新的read_auto
由于可视化代码过长隐藏,可点击运行Fork查看 🔜🔜若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/07/19
2960
​雷达系列:必须更新!测试cinrad最新更新的read_auto
基于geopandas的精美地图绘制:geoplot
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/10/08
2020
基于geopandas的精美地图绘制:geoplot
WRFOUT 单层水汽通量散度与整层水汽通量散度实现 2.0
📢 版权声明:公益性质转载需联系作者本人获取授权。转载本文时,请务必文字注明“来自:和鲸社区:酷炫用户名”,并附带本项目超链接。
用户11172986
2024/11/29
2640
WRFOUT 单层水汽通量散度与整层水汽通量散度实现 2.0
Scikit-fdiff | 二维浅水方程计算与可视化
在科学计算和工程领域,偏微分方程(PDE)的求解一直是一个复杂且耗时的任务。Scikit-fdiff是一个旨在简化这一过程的Python库,它通过有限差分法(Finite Difference Method)来离散化空间导数,并结合方法线(Method of Lines)将PDE转化为高维常微分方程(ODE),从而利用标准的ODE数值积分方法进行求解。
用户11172986
2025/03/21
1350
Scikit-fdiff | 二维浅水方程计算与可视化
两种降水站点数据克里金插值及可视化方法
gma库是洛大神写的一个地理库, 其中有许多可以使用的函数, 今天简单介绍一下它克里金插值的使用,并与meteva进行对比
用户11172986
2024/06/20
3830
两种降水站点数据克里金插值及可视化方法
雷达系列:两个国产雷达Python库读取对比
pycwr和pycinrad都是用于读取和处理气象雷达数据的Python库。 它们的作用是帮助用户方便地读取、处理和分析气象雷达数据,包括反射率、速度和谱宽等信息。 对比这两个库可以让用户更好地了解它们的特点、功能和适用场景,从而更好地选择合适的库来处理气象雷达数据。
用户11172986
2024/06/20
1.2K0
雷达系列:两个国产雷达Python库读取对比
velocyto的正确安装方法
如果你已经尝试了100种错误方法,恭喜你,找到家了。这个是99.9%能保证成功的安装方式。如果你第一篇就看到这个,更加恭喜你,你少走了一万里弯路!
生信技能树jimmy
2022/01/10
5K0
github爆火的1brc:气象站点数据计算挑战
在这个数据爆炸的时代,气象科学作为一门与人类生活息息相关的学科,正以前所未有的速度积累着庞大的数据量。想象一下,全球数以万计的气象站点,每分钟、每小时不间断地记录着气温、湿度、风速、降水量等关键气象参数,这些数据汇聚起来,形成了一个浩瀚的数据海洋
用户11172986
2024/06/20
2760
github爆火的1brc:气象站点数据计算挑战
不用 SHP 文件进行气象绘图的三种方式
在气象绘图中,使用 SHP 文件经常会带来一些麻烦。为了摆脱对 SHP 文件的依赖,我们需要思考如何直接进行绘图而不受其限制。本文将介绍三种不使用 SHP 文件进行气象绘图的工具。
用户11172986
2024/06/20
2200
不用 SHP 文件进行气象绘图的三种方式
重磅!Python台风路径还能这样画
读者来信,想优化一版台风路径绘制 在检索了半天终于找到一个库,tcmarkers。
用户11172986
2024/06/20
5010
重磅!Python台风路径还能这样画
如何使用 Python 更加精确地计算两地距离
在地理信息处理中,计算两点之间的距离、方位角以及从一个点出发给定距离和方位角求解另一个点的位置等问题是非常常见的需求。Python 提供了多种方式来实现这些功能,其中 pygc 是一个特别强大的库,它使用 Vincenty 的公式来精确地进行大圆相关的计算。
用户11172986
2025/02/08
2170
如何使用 Python 更加精确地计算两地距离
Python气候数据分析的简要指南+代码
By: Ali Ahmadalipour (LinkedIn, Twitter)
气象学家
2022/04/18
3K0
Python气候数据分析的简要指南+代码
数据获取:如何在线获取的GFS雪深两周后预报
上次测试的是0.5分辨率的GFS数据 这次试试更高分辨率0.25的效果 实际上TDSCatalog还有很多产品,可以在这里看看
用户11172986
2024/06/20
2630
数据获取:如何在线获取的GFS雪深两周后预报
MindSponge分子动力学模拟——使用MDAnalysis工具进行后分析(2024.02)
分子动力学模拟(Molecule Dynamics Simulation,MD),本质上是一门采样技术。通过配置力场参数、拓扑结构和积分器,对一个给定的体系不断的采样,最终得到一系列的轨迹。那么得到分子动力学模拟的轨迹之后,如何使用后分析工具进行轨迹分析,也是一项很重要的工作。目前来说,基于Python的开源工具MDAnalysis(简称mda)是一个比较常用的MD后分析工具。本文主要介绍基于MindSponge分子动力学模拟框架生成了相应的轨迹之后,如何使用MDAnalysis工具进行分析。
DechinPhy
2024/03/01
7690
MindSponge分子动力学模拟——使用MDAnalysis工具进行后分析(2024.02)
PHP使用简单强大OCR工具EasyOCR
EasyOCR是一个功能强大的开源光学字符识别OCR(Optical Character Recognition,光学字符识别)库,它基于深度学习模型,能够快速准确地识别图片中的文字,并将这些文字转换为可编辑和可搜索的文本格式。与传统的 OCR 工具相比,EasyOCR 不仅识别速度快,还能处理各种复杂的文本图像,如弯曲的文本、不同字体、各种语言混合的文本等。
Tinywan
2024/09/10
4850
PHP使用简单强大OCR工具EasyOCR
推荐阅读
相关推荐
基于 IBTrACS数据的台风路径快速可视化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档