• Qt之读写文件


    1.思路

    读写文件的基本操作:

    读文件

    写文件

    打开文件

    打开文件

    读取文件

    写入文件

    关闭文件

    关闭文件

    2.QFile实现读写文件

    QFile类提供读写文件的接口。 它的构造函数如下: QFile(const QString & name) QFile(QObject * parent) QFile(const QString & name, QObject * parent) 通过它的构造函数我们可以知道,可以直接在调用构造函数的时候直接传递文件名给QFile类,这是常用的方法,或者我们先生成QFile对象,然后调用setFileName()方法来设置文件。 其中文件名中的路径分隔符要求必须是’/’,其他分隔符QFile不支持。 然后再了解下QFile的常用函数以及打开文件的模式类型: QFile的常用函数:

    函数名

    功能

    copy()

    复制文件

    exists()

    检查文件是否存在

    open()

    打开文件

    remove()

    删除文件

    rename()

    修改文件名

    setFileName()

    设置文件名

    size()

    文件大小

    pos()

    文件光标当前位置

    seek()

    设置文件光标位置

    atEnd()

    判断当前是否为文件尾

    read()

    读取文件内容

    close()

    关闭文件

    本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

    文件打开模式

    模式

    描述

    QIODevice::NotOpen

    0x0000

    不打开

    QIODevice::ReadOnly

    0x0001

    只读方式

    QIODevice::WriteOnly

    0x0002

    只写方式,如果文件不存在则会自动创建文件

    QIODevice::ReadWrite

    ReadOnly | WriteOnly

    读写方式

    QIODevice::Append

    0x0004

    此模式表明所有数据写入到文件尾

    QIODevice::Truncate

    0x0008

    打开文件之前,此文件被截断,原来文件的所有数据会丢失

    QIODevice::Text

    0x0010

    读的时候,文件结束标志位会被转为’\n’;写的时候,文件结束标志位会被转为本地编码的结束为,例如win32的结束位’\r\n’

    QIODevice::UnBuffered

    0x0020

    不缓存

    下面通过代码来看看QFile的使用:

    1. //example 1
    2. QFile file("test.csv");
    3. //已读写方式打开文件,
    4. //如果文件不存在会自动创建文件
    5. if(!file.open(QIODevice::ReadWrite)){
    6. //ReadOnly文件不存在,打开失败
    7. //WriteOnly文件不存在,会自动创建文件
    8. //ReadWrite文件不存在,会自动创建文件
    9. //Append文件不存在,会自动创建文件
    10. //Truncate文件不存在,打开失败
    11. //Text文件不存在,打开失败
    12. //Unbuffered文件不存在,打开失败
    13. qDebug()<<"打开失败";
    14. }else{
    15. qDebug()<<"打开成功";
    16. }
    17. //操作文件
    18. //关闭文件
    19. file.close();

    写文件

    1. //example 2
    2. QFile file("test.csv");
    3. //判断文件是否存在
    4. if(file.exists()){
    5. qDebug()<<"文件已存在";
    6. }else{
    7. qDebug()<<"文件不存在";
    8. }
    9. //已读写方式打开文件,
    10. //如果文件不存在会自动创建文件
    11. if(!file.open(QIODevice::ReadWrite)){
    12. qDebug()<<"打开失败";
    13. }else{
    14. qDebug()<<"打开成功";
    15. }
    16. //获得文件大小
    17. qint64 pos;
    18. pos = file.size();
    19. //重新定位文件输入位置,这里是定位到文件尾端
    20. file.seek(pos);
    21. QString content = "welcome to BeiJing";
    22. //写入文件
    23. qint64 length = -1;
    24. length = file.write(content.toLatin1(),content.length());
    25. if(length == -1){
    26. qDebug()<<"写入文件失败";
    27. }else{
    28. qDebug()<<"写入文件成功";
    29. }
    30. //关闭文件
    31. file.close();

    控制台运行结果:

    打开文件看看里面的内容:

    正是我们程序中写入的内容。

    读文件 我们现在test.csv文件内准备两行数据

    代码如下:

    1. QFile file("test.csv");
    2. //判断文件是否存在
    3. if(file.exists()){
    4. qDebug()<<"文件已存在";
    5. }else{
    6. qDebug()<<"文件不存在";
    7. }
    8. //已读写方式打开文件,
    9. //如果文件不存在会自动创建文件
    10. if(!file.open(QIODevice::ReadWrite)){
    11. qDebug()<<"打开失败";
    12. }else{
    13. qDebug()<<"打开成功";
    14. }
    15. //读取文件
    16. int line = 1;
    17. //判断文件是否已经读到末尾了
    18. while(!file.atEnd()){
    19. char buffer[1024];
    20. //读取一行数据
    21. qint64 length = file.readLine(buffer,1024);
    22. if(length != -1){
    23. qDebug()<<line++<<":"<<buffer;
    24. }
    25. }
    26. //关闭文件
    27. file.close();

    控制台输出结果如下:

    和我们开始文件中准备的内容一致,表明已成功读取。

    本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 相关阅读:
    React报错之Expected an assignment or function call and instead saw an expression
    System Generator学习——时间和资源分析
    二十三、生成帮助文档
    【日常训练】871. 最低加油次数
    python之K线模式识别
    DS1339C串行实时时钟-国产兼容RS4C1339
    Python潮流周刊#8:Python 3.13 计划将解释器提速 50%!
    .net6 web api中使用SqlSugar(MySQL数据库)
    Kafka分区策略
    trzsz支持文件拖动到终端进行上传,类似lrzsz
  • 原文地址:https://blog.csdn.net/m0_60259116/article/details/128150335