Qt之读写文件

Qt之读写文件1.思路读写文件的基本操作:读文件写文件打开文件打开文件读取文件写入文件关闭文件关闭文件2.QFile实现读写文件QFile类提供读写文件的接口。它的构造函数如下:QFile(constQString&name)QFile(QObject*parent)QFile(constQString&name,QObject*parent)通过它的构造函数我

大家好,又见面了,我是你们的朋友全栈君。

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() 关闭文件

文件打开模式

模式 描述
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的使用:

    //example 1
    QFile file("test.csv");
    //已读写方式打开文件,
    //如果文件不存在会自动创建文件
    if(!file.open(QIODevice::ReadWrite)){
        //ReadOnly文件不存在,打开失败
        //WriteOnly文件不存在,会自动创建文件
        //ReadWrite文件不存在,会自动创建文件
        //Append文件不存在,会自动创建文件
        //Truncate文件不存在,打开失败
        //Text文件不存在,打开失败
        //Unbuffered文件不存在,打开失败
        qDebug()<<"打开失败";
    }else{
        qDebug()<<"打开成功";
    }

    //操作文件

    //关闭文件
    file.close();

写文件

    //example 2
    QFile file("test.csv");

    //判断文件是否存在
    if(file.exists()){
        qDebug()<<"文件已存在";
    }else{
        qDebug()<<"文件不存在";
    }
    //已读写方式打开文件,
    //如果文件不存在会自动创建文件
    if(!file.open(QIODevice::ReadWrite)){
        qDebug()<<"打开失败";
    }else{
        qDebug()<<"打开成功";
    }

    //获得文件大小
    qint64 pos;
    pos = file.size();
    //重新定位文件输入位置,这里是定位到文件尾端
    file.seek(pos);

    QString content = "welcome to BeiJing";

    //写入文件
    qint64 length = -1;
    length = file.write(content.toLatin1(),content.length());

    if(length == -1){
        qDebug()<<"写入文件失败";
    }else{
        qDebug()<<"写入文件成功";
    }

    //关闭文件
    file.close();

控制台运行结果:
这里写图片描述
打开文件看看里面的内容:
这里写图片描述
正是我们程序中写入的内容。

读文件
我们现在test.csv文件内准备两行数据
这里写图片描述
代码如下:

    QFile file("test.csv");

    //判断文件是否存在
    if(file.exists()){
        qDebug()<<"文件已存在";
    }else{
        qDebug()<<"文件不存在";
    }
    //已读写方式打开文件,
    //如果文件不存在会自动创建文件
    if(!file.open(QIODevice::ReadWrite)){
        qDebug()<<"打开失败";
    }else{
        qDebug()<<"打开成功";
    }

    //读取文件
    int line = 1;
    //判断文件是否已经读到末尾了
    while(!file.atEnd()){
        char buffer[1024];
        //读取一行数据
        qint64 length = file.readLine(buffer,1024);
        if(length != -1){
            qDebug()<<line++<<":"<<buffer;
        }
    }

    //关闭文件
    file.close();

控制台输出结果如下:
这里写图片描述
和我们开始文件中准备的内容一致,表明已成功读取。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137313.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 02将代码开源到github(不会使用github的来看看吧)「建议收藏」

    02将代码开源到github(不会使用github的来看看吧)

    2022年1月22日
    249
  • 互联网医疗行业PEST分析实践「建议收藏」

    互联网医疗行业PEST分析实践「建议收藏」Python微信订餐小程序课程视频https://edu.csdn.net/course/detail/36074Python实战量化交易理财系统https://edu.csdn.net/course/detail/35475前言今年开始逐步切入产品与数据工作,完全脱离了原来的舒适区,确实有一些挑战。开始以为只做数仓建设的事情,就仓促的学习了一些数仓相关的知识,但没搞多久,还要负责公司BI的工作,又开始补习数分相关的知识。BI其实比数仓建设更有挑战性,数仓建设已经有非常成熟的体系了,市面上有很多

    2022年4月29日
    228
  • 10 Free SVN & Project Hosting Services「建议收藏」

    10 Free SVN & Project Hosting Services「建议收藏」为什么80%的码农都做不了架构师?>>>…

    2022年10月8日
    6
  • xmind真正有用的几个快捷键(私人总结)

    xmind真正有用的几个快捷键(私人总结)自己总结的常用并且有用的快捷键,不是百度来的,自己一个个地摸索出来的:Ctrl+Shift+L快捷键助手Ctrl+Home返回中心主题Enter插入主题Tab插入子主题F2编辑主题F3添加/编辑标签F4添加/编辑备注F6下钻Shift+F6上钻Delete删除Ctrl+]插入摘要Ctrl+I插入图片Ctrl+Shift+H

    2022年5月27日
    46
  • Nginx负载均衡算法分析[通俗易懂]

    Nginx负载均衡算法分析[通俗易懂]随着互联网信息的爆炸性增长,负载均衡(loadbalance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲(如F5BIG-IP、CitrixNetScaler、Radware等等,虽然可以解决问题

    2022年10月12日
    3
  • RSA算法详解_warshall算法

    RSA算法详解_warshall算法一、概述RSA算法是1977年由RonRivest、AdiShamir和LeonardAdleman三人组在论文AMethodforObtainingDigitalSignatu

    2022年8月4日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号