专栏首页Coding十日谈一篇文章快速搞懂Qt文件读写操作

一篇文章快速搞懂Qt文件读写操作

导读:Qt当中使用QFile类对文件进行读写操作,对文本文件也可以与QTextStream一起使用,这样读写操作会更加简便。QFileInfo可以用来获取文件的信息。QDir可以用于对文件夹进行操作。

本文字数:1000,阅读时长大约:10分钟

一、文件读操作

(1)使用QFile类

Qt封装了QFile类,方便我们对文件进行操作,可以按照如下的步骤进行:

  • 使用QFile加载文件对象
  • 打开文件 file.open(打开方式)
  • 操作文件
  • 关闭文件 file.close()

使用QFile首先用只读方式打开一个文本文件,然后用readAll()方法将文件内容一次全部读取出来,返回值是字节数组QByteArray。QByteArray用来存放二进制数据,如果想要看文字内容需要转换成QString。

Qt默认使用utf-8的编码方式,在Linux中一般没有问题,因为Linux默认也是用utf-8。不过Windows里一般用的是gb18030,所以除非我们明确将文件保存成utf-8编码,否则在Qt代码里需要对编码做一些转换操作:

我们也可以使用readLine方法一次读取一行,然后每次对一行文字进行操作:

(2)使用QTextStream类

如果操作的是文本文件,Qt还专门封装了一个处理文本流的类,我们可以一行一行的读取文本内容

二、文件写操作

(1)使用QFile类

使用QFile同样可以对文件进行写操作:

(2)使用QTextStream类

QTextStream类对操作符进行了重载,我们可以通过 << 操作符将字符串流入文本文件:

三、文件信息读取

除了对文件的读写操作,Qt还封装了QFileInfo类帮助我们获取文件的元数据,比如文件大小、后缀名、创建时间、最后修改时间等等:

四、文件夹的操作

QDir类可以对路径/文件夹/目录进行操作(不同的系统有不同的名称)。首先我们可以用QDir表示绝对路径,比如:

    QDir("/home/user/Documents")
    QDir("C:/Documents and Settings")

也可以表示相对路径,比如:

QDir("images/landscape.png")

我们可以用IsRelative()和IsAbsolute()方法来检验某个QDir对象使用的是绝对路径还是相对路径。不管用的是哪一种,两者之间也可以相互转化:

QDir directory("Documents/Letters");
QString path = directory.filePath("contents.txt");
QString absolutePath = directory.absoluteFilePath("contents.txt");

我们经常用到QDir的例子有比如检查某个路径是否存在:

或者查找某个路径下的文件:

五、文件夹的操作

Qt对文件和文件夹的操作封装了很多类,比如对文件操作可以使用QFile,文本文件的读写可以使用QTextStream,读取文件元数据可以使用QFileInfo,文件夹的操作可以使用QDir等。这些类为开发者提供了极大的便利,还有很多方法本文不能一一介绍到,感兴趣的读者也可以查阅Qt的帮助文档。

本文分享自微信公众号 - Coding十日谈(tendayscoding),作者:Boccaccio

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++最好的图形库是什么?

    世界上的GUI库多如牛毛,有的开源,有的收费,有的可以做手机app开发,有的可以做桌面应用,有的只能用在某个系统,有的支持跨平台。基于不同的编程语言,人们又开发...

    Coding十日谈
  • 3分钟教会你如何发布Qt程序

    导读:Qt程序编写好以后该如何发布。本文教你使用Qt自带工具windeployqt来进行操作。

    Coding十日谈
  • Unix 是用 C 语言编写的吗?

    Unix 确实是用 C 语言编写的,而且是世界上第一个用 C 语言编写的操作系统。但是 Unix 是怎么产生的?C 语言又是怎么产生的?Unix 为什么要用 C...

    Coding十日谈
  • 【机器学习理论】为什么L1稀疏,L2平滑?

    使用机器学习方法解决实际问题时,我们通常要用L1或L2范数做正则化(regularization),从而限制权值大小,减少过拟合风险。特别是在使用梯度...

    fishexpert
  • Qt开源作品18-无边框背景透明窗体

    用Qt来做无边框北京透明窗体非常简单,根本不需要用什么系统层的API来实现透明什么的,Qt本身提供了很多种设置窗体透明的方法,除了可以设置窗体的属性为透明以外,...

    feiyangqingyun
  • AI诊断又有新算法,让人们提前10年知道自己是否会老年痴呆 | 黑科技

    镁客网
  • 一日一技:请不要再用re.compile了!!!

    如果大家在网上搜索 Python正则表达式,你将会看到大量的垃圾文章会这样写代码:

    青南
  • 数字转中文大写金额

    _一级菜鸟
  • 正态分布在机器学习中为何如此重要?

    两个骰子面值之和的概率,是两个骰子独立事件的概率的和。比如,得到点数3的概率为:一颗1、一颗2的概率 加上 一颗2、一颗1的概率 之和:

    统计学家
  • 正态分布在机器学习中为何如此重要?

    两个骰子面值之和的概率,是两个骰子独立事件的概率的和。比如,得到点数3的概率为:一颗1、一颗2的概率 加上 一颗2、一颗1的概率 之和:

    黄鸿波

扫码关注云+社区

领取腾讯云代金券