当前位置: 首页 > article >正文

qt QFile详解

1、概述

QFile类是Qt框架中用于读取和写入文本和二进制文件资源的I/O工具类。它继承自QFileDevice类,后者又继承自QIODevice类。QFile类提供了一个接口,允许开发者以二进制模式或文本模式对文件进行读写操作。默认情况下,QFile假定文件内容为二进制,即不对文件中的字节执行任何转换。QFile类既可以单独使用,也可以与QTextStream或QDataStream类结合使用,以提高文件读写的效率和便利性。

2、重要方法

QFile类提供了多种方法来操作文件,以下是一些重要的方法:

  • 构造函数:QFile()、QFile(const QString &name)。其中,第二个构造函数允许在创建QFile对象时直接指定要操作的文件名(包含路径)。
  • setFileName():用于设置要操作的文件名。
  • open():以指定的模式打开文件。打开模式可以是只读、只写、读写、追加等,这些模式通过QIODevice类中定义的枚举值来指定。
  • read()readAll()readLine():用于从文件中读取数据。其中,read()方法允许读取指定大小的数据,readAll()方法读取整个文件的内容,readLine()方法按行读取文件内容。
  • write():用于将数据写入文件。
  • close():关闭文件。
  • size():返回文件的大小(以字节为单位)。
  • exists():检查文件是否存在。
  • remove():删除文件。

此外,QFile类还与QTextStream和QDataStream类紧密结合,提供了更高级的读写操作。QTextStream用于读写文本文件,支持多种编码格式;QDataStream用于读写二进制文件,支持跨平台的数据序列化。

3、重要信号

需要注意的是,与其他QIODevice子类不同,QFile不会发送QIODevice::aboutToClose()、QIODevice::bytesWritten()和QIODevice::readyRead()等信号。这意味着QFile不适合用于需要实时监测文件读写状态的场景。


4、重要操作模式

以下是QFile类中一些常见的操作模式及其简要介绍:

  • QIODevice::ReadOnly:只读模式。
  • QIODevice::WriteOnly:只写式。
  • QIODevice::ReadWrite:读写模式。
  • QIODevice::Append:追加模式。
  • QIODevice::Truncate:截断模式。
  • QIODevice::Text:文本模式。
#include <QFile>  
#include <QDebug>  
#include <QTextStream>  
  
int main(int argc, char *argv[])  
{  
    // 创建QFile对象,并指定要操作的文件名  
    QFile file("example.txt");  
  
    // 以写模式打开文件  
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {  
        qDebug() << "文件打开失败";  
        return -1;  
    }  
  
    // 使用QTextStream写入文本数据到文件  
    QTextStream out(&file);  
    out << "Hello, Qt!\n";  
    out << "This is a test file.\n";  
  
    // 关闭文件  
    file.close();  
  
    // 以读模式重新打开文件  
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {  
        qDebug() << "文件打开失败";  
        return -1;  
    }  
  
    // 使用QTextStream读取文件内容  
    QTextStream in(&file);  
    QString line;  
    while (!in.atEnd()) {  
        line = in.readLine();  
        qDebug() << line;  
    }  
  
    // 关闭文件  
    file.close();  
  
    return 0;  
}

觉得有帮助的话,打赏一下呗。。

           


http://www.kler.cn/a/386235.html

相关文章:

  • 解读Nature:Larger and more instructable language models become less reliable
  • 【mysql的当前读和快照读】
  • 一文窥见神经网络
  • Dolby TrueHD和Dolby Digital Plus (E-AC-3)编码介绍
  • 解锁微前端的优秀库
  • HBase 安装与基本操作指南
  • 拓扑排序(C++类封装+数组模拟队列和邻接表)
  • 代码随想录之双指针刷题总结
  • wordpress判断page页与非page页
  • 【图论】图的C++实现代码
  • Python小白学习教程从入门到入坑------第二十八课 文件基础操作文件读写(语法进阶)
  • 【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用
  • java后台生成模拟聊天截图并返回给前端
  • MySql中索引为什么用B+树,他有什么特点?时间复杂度是多少?能存多少数据?是不是只能三层?他与B-树有什么不同?还有其它的树你是是否知道?
  • AIPPT项目(提供完整API接入支持套壳)成熟产品线上运营
  • MySQL常用订单表复杂查询15例
  • 找工作就上:万码优才!海量技术岗位等你来
  • PKG_CHECK_MODULES(FUSE,fuse)
  • 「实战应用」如何用图表控件LightningChart .NET在WPF中制作表格?(一)
  • 关于 CSS 常用布局及特点作用
  • 微信小程序-事件总线
  • BP 神经网络模型:原理、实现与应用
  • GFPS技术原理(二)-模型注册和配置
  • react中的组件传参
  • pythons工具——图像的随机增强变换(只是变换了图像,可用于分类训练数据的增强)
  • Elasticsearch 实战应用详解!