Qt之读写文件

2023-10-27

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的使用:

    //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();

控制台输出结果如下:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt之读写文件 的相关文章

  • QtRuby 可以与 Qt 5 一起使用吗?

    我可以在网上找到的所有内容QtRuby https duckduckgo com q ruby and qt使用 Qt 4 但当前的 Qt 版本是 5 这是否只是文档跟不上现实的问题 Qt 5 可以与 QtRuby 一起正常工作 如果您断言
  • 如何将 Qt5 和 Qt Creator 2.6.1 与 VS 2012 的编译器一起使用?

    官方下载 http qt project org downloads现在仅包含 VS 2010 的 Qt 库 5 0 0 我在 VS 2012 Express 中尝试了它们 但收到一条错误消息 错误 LNK2038 检测到 MSC VER
  • 如何在Qt6中的QML中使用QVideoSink

    我创建了自己的视频接收器 继承自QVideoSink在 Qt 6 中 我想在 QML 端显示该接收器的内容 我该怎么做 VideoOutputQML 类型有videoSink属性 但它是只读的 VideoOutput 和 QVideoWid
  • QML:原始模型中的动态视图重新排序

    使用此 Qt 教程通过拖动视图项来实现 QML 动态视图排序 QML 动态视图排序教程 https doc qt io qt 5 qml dynamicview tutorial html 原始底层模型是QAbstractListModel
  • qt5中MainWindow是用自身初始化的吗?

    我尝试学习 qt 5 但不明白一件事 Qt Creator 默认创建这两个文件 主窗口 h ifndef MAINWINDOW H define MAINWINDOW H include
  • 如何向 QFileSystemModel 添加自定义角色

    我想向 QFileSystemModel 添加自定义角色 可能是派生模型 我想使用此角色来保存复选框的选中状态 该状态显示在自定义委托中的文件名旁边 如何才能做到这一点 我已经使用过使用示例Qt Quick Controls 文件系统浏览器
  • QVBoxLayout:如何使用 Qt 设计器将小部件对齐到顶部

    我仅将 qt 设计器用于 ui 布局 这与这个问题几乎是同一个问题 QVBoxLayout 如何将小部件垂直对齐到顶部而不是中心 https stackoverflow com questions 10082299 qvboxlayout
  • 如何在QML中设置弹出菜单位置

    我想修复 QML 中弹出菜单的位置 当我单击设置按钮时 我希望弹出菜单将显示在固定位置 我用了一天的时间就做到了 但是做不到 我怎样才能在 QML 中做到这一点 另外 我想更改菜单项的大小 宽度和高度 希望您的帮助 这取决于QtQuick
  • Qt5 链接器错误:找不到版本“Qt_5”

    1 问题 我正在尝试构建开源motorcar https github com evil0sheep motorcar在 Arch Linux 机器上从头开始项目 Motorcar 是一款 Linux VR 窗口管理器 可与 Oculus
  • 当鼠标位于 Qt 窗口的自定义小部件上时,如何移动整个窗口?

    假设我有一个自定义小部件并将其添加到 qt 的主窗口中 如您所见 红色区域是自定义小部件 我想要做的是 当鼠标在红色区域按下并移动时 整个窗口也会移动 我知道如何简单地实施mousePressEvent and mouseMoveEvent
  • 如何在 Qt 5 中写入和读取 QResource 文件?

    很奇怪 我通过以下方式将所需的文件添加到资源中添加现有文件 文件就在那里 我运行 qmake 构建 gt 运行 qmake 以使文件可用 第一期 我无法从输出终端向文件写入任何内容 但是当我手动写入文件时 每次运行它时输出终端都会显示更改
  • 为什么我的 QGestureRecognizer 收不到触摸事件?

    上下文 我正在尝试创建一个类似推子的小部件 它可以在同一视图中具有多个实例 每个实例都可以由不同的手指同时控制 我想用Qt的手势识别系统 http qt project org doc qt 4 8 gestures overview ht
  • QGeoCoordinate:没有这样的文件或目录

    我正在尝试使用 QtLocation 但不能 我不明白为什么 我在 ubuntu 14 04 上使用 qt5 3 2 这很奇怪 因为我将这一行添加到我的 pro 文件中 QT network CONFIG mobility MOBILITY
  • Qt3D 是 Qt5 的一部分吗?

    我在windows中安装了Qt5库 但Qt助手中没有关于Qt3D的文档 Qt3D 是 Qt5 的一部分还是已从发布版本 5 中删除 是的 Qt 3D 成为标准 Qt 库Qt 5 7 发布 http blog qt io blog 2016
  • QOpenGLFunctions 缺少重要的 OpenGL 函数

    QOpenGLFunctions 似乎缺少重要的函数 例如 glInvalidateFramebuffer 和 glMapBuffer 据我了解 QOpenGLFunctions 加载桌面 OpenGL 函数和 ES 函数的交集 如果是这样
  • Qt 的 sysroot 和前缀选项的实际示例是什么

    我正在查看可以运行的所有选项configureQt 提供的脚本 特别是 qt everywhere opensource src 5 2 0 经过大量搜索后 我确定这些东西充其量记录很少 所以我希望我能得到一些帮助 当我查看描述时prefi
  • 当 QML 对象不可见时防止 QML 属性绑定?

    我正在开发一个具有大量属性绑定的 QML 应用程序 数百个对象被跟踪并以不同的形式显示 例如 Qt3D QCanvas 当我在应用程序的单独页面上时 x y 位置和相对大小的属性绑定仍在发生 我怎样才能阻止他们 我知道我可以根据属性是否可视
  • 错误 LNK2001:无法解析的外部符号 __CxxFrameHandler3

    我正在将 Qt 从 VS 2013 迁移到 Qt 5 10 1 到 VS 2015 出现以下多个链接错误 error LNK2001 unresolved external symbol CxxFrameHandler3 error LNK
  • 如何将图像显示为缩略图

    我有一个QTreeView显示硬盘驱动器和目录 我也有一个QListView显示图像文件如下 但我想将图像显示为缩略图 如下所示 My code mainWidget mainWidget QWidget parent QWidget pa
  • 如何使用meta-toolchain-qt5构建Qt(带有QtWebEngine支持)?

    我正在尝试使用构建 Qtmeta toolchain qt5 但是当我通过这样做时poky glibc x86 64 meta toolchain qt5 cortexa7hf vfp vfpv4 neon toolchain 2 0 1

随机推荐

  • plsql developer 通过ip链接数据库

    数据库 ip 1521 sid 或 ip sid
  • oracle因为日志错误无法打开

    今天在启动我得数据库时 发现数据库只能mounted 无法打开 提示错误 今天在启动我得数据库时 发现数据库只能mounted 无法打开 提示错误 SQL gt select open mode from v database OPEN M
  • Docker Swarm集群搭建以及服务命令等操作

    前言 之前都是采用rancher可视化管理工具进行管理K8S进一步管理容器 但是每次机器宕机后rancher中集群特别容易挂掉 出现的问题五花八门 在网上很难搜到解决方案 所以准备采用docker官方集群管理平台Swarm管理容器 一 do
  • The Reactive Manifesto(响应式宣言)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 版本 2 0 2014 年 9 月 16 日发布 在不同领域中深耕的组织都在不约而同地尝试发现相似的软件构建模式 希望这些系统会更健壮 更具回弹性 更灵活 也能更好地满足现
  • oracle 分区表 详

    转载自 http blog itpub net 31401608 viewspace 2147665 1 表空间及分区表的概念 表空间 是一个或多个数据文件的集合 所有的数据对象都存放在指定的表空间中 但主要存放的是表 所以称作表空间 分区
  • 入站规则和出站规则_关于防火墙入站(inbound)出站(outbound)方式的解释

    防火墙是一个重要的安全模块 它能够限制网络的访问 现在有一个要求那就是要让主机A能够访问主机B 主机B不能访问主机A 那么防火墙能够做到么 答案是可以的 当主机A的防火墙入站规则限制了主机B 那么主机B想访问主机A的时候 发出的网络包确实会
  • Echart 地图开启缩放之后,中心点位置偏移

    把 geo center 设为 undefined geo map china center undefined roam true
  • Nginx流控限制

    Nginx流控 流量限制 rate limiting 是Nginx中一个非常实用 却经常被错误理解和错误配置的功能 我们可以用来限制用户在给定时间内HTTP请求的数量 请求 可以是一个简单网站首页的GET请求 也可以是登录表单的POST请求
  • .ajax表单校验插件,表单验证插件——validate

    表单验证插件 表单验证插件 邮箱 function frmV validate 自定义验证规则 rules 错误提示位置 errorPlacement function error element error appendTo tip di
  • 什么是用户增长? (超详细)

    一 概况 原因 随着人口红利的衰减 互联网流量红利的马太效应显现 这意味着成本的大幅度增加 企业必须改变过去粗放型的营销和运营方式 用更高效更低成本实现快速增长 定义 通过实验和数据驱动 聚焦整个用户生命周期的方法论 在任何一家公司 任何业
  • jetbrains全家桶

    到期时间 19年6月份 SXXI7H41YN eyJsaWNlbnNlSWQiOiJTWFhJN0g0MVlOIiwibGljZW5zZWVOYW1lIjoicGF5bmUgd2FuZyIsImFzc2lnbmVlTmFtZSI6IiIsI
  • C++项目:高并发内存池

    文章目录 项目介绍 什么是内存池 池化技术 内存池 malloc 页 定长的内存池 对比测试 高并发内存池整体框架设计 thread cache 整体设计 哈希桶映射对齐规则 TLS无锁访问 Central Cache Span SpanL
  • 时分秒与时间戳相互转化(sys.argv)

    import sys 把时分秒转化为时间戳 def countDown time s 0 hour time split 0 min time split 1 sec time split 2 s int hour 3600 int min
  • MKL的矩阵运算

    矩阵与矩阵的乘法 分为双精度的cblas sgemm和单精度的cblas sgemm 两个函数的参数意义一样 只是类型不一样 运算式 C alpha A B beta C 一般取alpha 1 0 beta 0 0 即计算式 C A B c
  • LateX环境安装与配置--包括常见安装失败错误更正(TeX Live 2021及TexStudio)

    目录 一 前言 二 下载镜像文件 1 打开网址 点击 On DVD 2 点击下载ISO镜像文件 3 选择一个最近的镜像网站进行下载 4 下载镜像文件 5 打开镜像文件 三 安装 1 修改安装内容及目录 2 出错问题 lt 1 gt 此电脑
  • pandas从mongo中导出数据存入excel或csv

    import pandas as pd import pymongo mongo不带密码连接 con pymongo MongoClient ip mongo带密码连接 con pymongo MongoClient mongodb for
  • SQL_les0/基础知识/联合注入常用语句与相关技巧

    SQL注入 一种针对数据库的攻击方式 危害 数据被破坏 数据被篡改 原理 攻击者通过构造不同的SQL语句来实现对数据库的操作 常见数据库 Oracle SQL Server DB2 PostgreSQL MySQL Access 使用SQL
  • 【图像去雾】Contrastive Learning for Compact Single Image Dehazing阅读

    论文 https arxiv org pdf 2104 09367 pdfhttps arxiv org pdf 2104 09367 pdf 代码 https github com GlassyWu AECR Nethttps githu
  • MongoDB修改数据库名,collection名库名

    修改数据库名 db copyDatabase test test1 db copyDatabase old name new name use test use old name db
  • Qt之读写文件

    1 思路 读写文件的基本操作 读文件 写文件 打开文件 打开文件 读取文件 写入文件 关闭文件 关闭文件 2 QFile实现读写文件 QFile类提供读写文件的接口 它的构造函数如下 QFile const QString name QFi