【QT】QT中的文件IO

QT中的文件IO

  • 一、有关文件IO的类
  • 二、步骤
    • 1、定义QFile的对象,与要读写的文件绑定在一起
    • 2、打开文件
    • 3、读写文件
      • 1)读取文件
      • 2)写入文件
    • 4、关闭文件
    • 5、示例代码:
  • 三、QString和QByteArray之间的转换
    • 1、方法
    • 2、示例代码:
  • 四、QFileInfo类 --》获取文件属性
    • 1、方法
  • 五、QDir类 --》QT中的目录操作
    • 1、方法
    • 2、示例代码(与QFileInfo配合使用)

一、有关文件IO的类

QFile 表示某个文件对象
QDir 表示某个目录对象
QFileInfo 存放文件的属性信息(文件大小,文件类型等等)

二、步骤

1、定义QFile的对象,与要读写的文件绑定在一起

QFile::QFile(const QString &name)
参数:name --》需要读写的文件路径名

2、打开文件

bool QIODevice::open(OpenMode mode)返回值:成功 true  失败 false参数:QIODevice::ReadOnly    //只读QIODevice::WriteOnly   //只写QIODevice::ReadWrite   //只读写
新建文件  open(QIODevice::WriteOnly|QIODevice::Truncate)

3、读写文件

1)读取文件

qint64 QIODevice::read(char *data, qint64 maxSize)返回值:成功 返回读取的字节数  失败 -1参数:data --》保存读取的数据maxSize --》读取多少字节的数据QByteArray QIODevice::read(qint64 maxSize)返回值:读取的数据参数:maxSize --》读取多少字节的数据
QByteArray QIODevice::readAll()  //一次性读取整个文件内容,适合读取小文件
qint64 QIODevice::readLine(char *data, qint64 maxSize) //一次最多读取一行文件数据
类比:fgets

2)写入文件

qint64 QIODevice::write(const char *data, qint64 maxSize)
qint64 QIODevice::write(const QByteArray &byteArray)

4、关闭文件

void QIODevice::close()

5、示例代码:

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
//    ui->textBrowser->setText("你好,世界aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}MainWindow::~MainWindow()
{delete ui;
}// pushbutton 右键转到槽
void MainWindow::on_pushButton_clicked()
{QString pathName = QFileDialog::getOpenFileName(this);// 创建文件对象QFile myFile(pathName);// 打开文件bool ret = myFile.open(QIODevice::ReadWrite);if (!ret){QMessageBox::warning(this, "警告", "文件打开失败");return;}// 读取文件内容// char buf[100]={0};// myfile.read(buf,100); //读取100个字节存放到buf中// qDebug()<<"读取的内容: "<<buf;// QByteArray buf=myfile.read(100);  //读取100个字节,以返回值的形式返回// QByteArray叫做字节数组,里面的内容是16进制的形式显示// 把QByteArray转换成QString  QString(const QByteArray &ba)// QString str(buf);// qDebug()<<"读取的内容: "<<str;// 一次性读取整个文件(视频几十M以上的无法读取)QByteArray buf=myFile.readAll();//在文本浏览框中显示ui->textBrowser->setText(buf);//关闭文件myFile.close();
}

三、QString和QByteArray之间的转换

1、方法

QByteArray --》QString   自动转换,调用了构造函数
QString --》QByteArray   必须使用函数转换  QByteArray QString::toUtf8()
char * --》QString       自动转换,调用了构造函数
QString --char *       调用QString中的data()方法

2、示例代码:

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QByteArray>
#include <QString>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 1、QByteArray --》QString   自动转换(调用了构造函数)QByteArray byteArry("你好,世界");QString str1 = byteArry;  // 跟QString str1(byteArry)等价的qDebug()<<"str1:"<<str1;  // str1: "你好,世界"// 2、QString --》QByteArray   必须使用函数转换  QByteArray QString::toUtf8()QString str2="helloworld";QByteArray array2=str2.toUtf8();qDebug()<<"array2:"<<array2;  // array2: "helloworld"// 3、char * --》QString       自动转换(调用了构造函数)char buf[10]="你好";QString str3=buf;  //跟QString str3(buf)等价的qDebug()<<"str3:"<<str3;  // str3: "你好"// 4、QString --》char *       调用QString中的data()方法QString str4="nihao";QChar *p=str4.data();qDebug() << "通过循环逐个输出字符:";for (int i = 0; p[i] != '\0'; ++i){qDebug() << p[i];}
}MainWindow::~MainWindow()
{delete ui;
}

四、QFileInfo类 --》获取文件属性

1、方法

QFileInfo::QFileInfo(const QString &file)参数:file --》文件的路径名
QString QFileInfo::filePath() const  //获取文件的路径名
bool QFileInfo::isDir() const        //判断文件是否是目录
qint64 QFileInfo::size() const       //获取文件大小
QString QFileInfo::suffix() const    //获取文件的后缀名

五、QDir类 --》QT中的目录操作

1、方法

第一步:新建QDir的对象,跟某个目录的路径绑定一起
QDir::QDir(const QString &path = QString())参数:path --》要遍历的目录的路径名
第二步:遍历目录,得到目录的文件名
QStringList QDir::entryList() const返回值:字符串列表中存放了目录中所有的文件名字

2、示例代码(与QFileInfo配合使用)

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDir>
#include <QDebug>
#include <QFileInfo>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}// 打开目录
void MainWindow::on_pushButton_clicked()
{// 打开目录对话框QString dirpath=QFileDialog::getExistingDirectory(this,"我的目录");//qDebug()<<"选择的目录是: "<<dirpath;// 创建QDir的对象表示某个目录QDir mydir(dirpath);// 遍历目录QStringList filelist=mydir.entryList();for(auto x:filelist)qDebug()<<"选择的目录中包含了: "<<x;// 获取文件的属性QFileInfo info("C:/Users/Administrator/Desktop/vm_share/笔记/1.txt");// 获取文件大小qDebug()<<"文件大小是: "<<info.size();qDebug()<<"文件后缀名是: "<<info.suffix();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/75241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 499 错误的原因及解决方法

Nginx 499 错误的原因及解决方法 原因 客户端超时&#xff1a; 客户端在等待服务器响应时超时&#xff0c;导致连接被关闭。 解决方法&#xff1a;优化服务端响应时间&#xff0c;或调大客户端的连接超时时间。 服务端响应过慢&#xff1a; 后端服务处理请求时间过长。 解决方法…

Smith-Waterman 算法(C++实现)

本文实现Smith-Waterman 算法案例&#xff0c;用于局部序列比对。该算法是生物信息学中用于寻找两个 DNA、RNA 或蛋白质序列之间最优局部比对的经典算法&#xff0c;广泛应用于序列相似性分析和功能预测。 问题描述 给定两个生物序列 seq1 和 seq2&#xff0c;如何找到它们的最…

安卓玩机工具-----安卓机型通用 无损备份与恢复数据的工具BackupToolkit 操作过程

常规安卓机型数据备份与恢复的方法及工具 安卓设备的数据备份与恢复是保护个人数据的重要手段之一。以下是几种常用的方法和工具&#xff1a; 方法一&#xff1a;利用内置的云服务进行备份 许多安卓设备提供了内置的云服务&#xff0c;例如华为手机可以通过“华为云空间”来…

oracle 动态性能视图

Oracle 数据库中的 V$SQLAREA 是一个动态性能视图&#xff08;Dynamic Performance View&#xff09;&#xff0c;用于记录共享池&#xff08;Shared Pool&#xff09;中所有 SQL 语句的统计信息。每个 SQL 语句在共享池中存储为一个游标&#xff08;Cursor&#xff09;&#x…

OceanBase V4.3.5 上线全文索引功能,让数据检索更高效

近日&#xff0c;OceanBase 4.3.5 BP1 版本正式推出了企业级全文索引功能。该版本在中文分词、查询效率及混合检索能力上进行了全面提升。经过自然语言模式和布尔模式在不同场景下的对比测试&#xff0c;OceanBase 的全文索引性能明显优于 MySQL。 点击下载 OceanBase 社区版…

海康摄像头AI报警、移动侦测报警等通过Ehome/ISUP协议上报到LiveNVR流媒体平台时如何进行报警配置

海康摄像头AI报警、移动侦测报警等通过Ehome/ISUP协议上报到LiveNVR流媒体平台时如何进行报警配置 1、LiveNVR介绍2、如何配置海康摄像头、录像机通过Ehome/ISUP注册到LiveNVR设备 EHOME 接入配置示例设备 ISUP 接入配置示例直播流接入类型 海康ISUP海康 ISUP 设备ID启用保存 3…

golang gmp模型分析

思维导图&#xff1a; 1. 发展过程 思维导图&#xff1a; 在单机时代是没有多线程、多进程、协程这些概念的。早期的操作系统都是顺序执行 单进程的缺点有&#xff1a; 单一执行流程、计算机只能一个任务一个任务进行处理进程阻塞所带来的CPU时间的浪费 处于对CPU资源的利用&…

Redis基础指令(Windows)

1.cmd命令行启动redis 直接cmd打开整个文件 1.1.启动server 输入指令&#xff1a; redis-server.exe redis.windows.conf 会进入serve端 1.2.启动客户端 &#xff01;&#xff01;重新打开一个cmd&#xff0c;方法和上面一样&#xff01;&#xff01; 之后输入 redis-…

vue:前端预览 / chrome浏览器设置 / <iframe> 方法预览 doc、pdf / vue-pdf 预览pdf

一、本文目标 <iframe> 方法预览 pdf 、word vue-pdf 预览pdf 二、<iframe> 方法 2.1、iframe 方法预览需要 浏览器 设置为&#xff1a; chrome&#xff1a;设置-隐私设置和安全性-网站设置-更多内容设置-PDF文档 浏览器访问&#xff1a; chrome://settings/co…

【C++游戏引擎开发】第11篇:GLFW、GLAD环境搭建与第一个三角形渲染

一、GLFW、GLAD安装 1.1 vcpkg安装相关库 跨平台C++包管理利器vcpkg完全指南 # 安装GLFW vcpkg install glfw3# 安装GLAD vcpkg install glad1.2 初始测试代码 #include <glad/glad.h> #include <GLFW/glfw3.h> int main() {glfwInit();GLFWwindow* window = g…

西门子S7-1500与S7-200SMART通讯全攻略:从基础配置到远程IO集成

以下是一篇关于西门子S7-1500与S7-200SMART通讯的详细教程&#xff0c;包含远程IO模块的配置方法&#xff0c;适用于工业自动化场景的博客发布&#xff1a; 西门子S7-1500与S7-200SMART通讯全攻略&#xff1a;从基础配置到远程IO集成 一、硬件与软件准备 硬件设备 主站&#x…

前端性能优化的全方位方案【待进一步结合项目】

以下是前端性能优化的全方位方案,结合代码配置和最佳实践,涵盖从代码编写到部署的全流程优化: 一、代码层面优化 1. HTML结构优化 <!-- 语义化标签减少嵌套 --> <header><nav>...</nav> </header> <main><article>...</arti…

前端快速入门——JavaScript变量、控制语句

1.JavaScript 定义 JavaScript 简称 JS. JavaScript 是一种轻量级、解释型、面向对象的脚本语言。它主要被设计用于在网页上实现动态效果&#xff0c;增加用户与网页的交互性。 作为一种客户端脚本语言&#xff0c;JavaScript 可以直接嵌入 HTML&#xff0c;并在浏览器中执行。…

GitHub 趋势日报 (2025年04月01日)

GitHub 趋势日报 (2025年04月01日) 本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星语言1punkpeye/awesome-mcp-serversA collection of MCP servers.⭐ 3280未指定2th-ch/youtube-musicYouTu…

windows手动添加鼠标右键弹窗快捷方式

此处以添加Git Bash Here为例 一.操作步骤 按 Win R 键打开 运行 对话框&#xff0c;输入 regedit&#xff0c;并按下回车&#xff0c;打开注册表编辑器。 导航到 HKEY_CLASSES_ROOT\Directory\Background\shell。 右键单击 shell&#xff0c;选择 新建 → 项&#xff0c;并…

2025.04.09【Sankey】| 生信数据流可视化精讲

文章目录 引言Sankey图简介R语言中的Sankey图实现安装和加载networkD3包创建Sankey图的数据结构创建Sankey图绘制Sankey图 结论 引言 在生物信息学领域&#xff0c;数据可视化是理解和分析复杂数据集的关键工具之一。今天&#xff0c;我们将深入探讨一种特别适用于展示数据流动…

GD32H759IMT6 Cortex-M7 OpenHarmony轻量系统移植——4.1版本升级到5.0.3

笔者在去年利用国庆时间&#xff0c;将Cortex-M7 的国产厂商兆易创新GD32H459移植OpenHarmony轻量系统&#xff0c;但是适配不太完善——只能选择liteos-m接管中断。这样导致使用中断非常麻烦。于是笔者最近将接管中断模式修改为不接管&#xff0c;这样可以方便的使用gd32提供的…

【算法竞赛】树上最长公共路径前缀(蓝桥杯2024真题·团建·超详细解析)

目录 一、题目 二、思路 1. 问题转化&#xff1a;同步DFS走树 2. 优化&#xff1a;同步DFS匹配 3. 状态设计&#xff1a;dfs参数含义 4. 匹配过程&#xff1a;用 map 建立权值索引 5. 终止条件&#xff1a;无法匹配则更新答案 6. 总结 三、完整代码 四、知识点总…

开源免费虚拟化平台PVE软件定义网络

一、PVE SDN&#xff08;Software Defined Networking&#xff09;原理与使用逻辑 SDN&#xff08;软件定义网络&#xff09; 是一种将网络控制逻辑从传统交换机、路由器中分离出来的技术&#xff0c;使得网络可以通过软件集中管理和自动化配置。 Proxmox VE&#xff08;PVE&…

mysql 8.0.41下载安装教程(附安装包)mysql 8.0.41图文详细安装教程

文章目录 前言一、mysql 8.0.41 简介二、安装前准备三、MySQL 8.0 安装流程解析1.解压安装包2.启动安装程序3.选择安装类型4.选择安装组件5.开始安装6.配置设置&#xff08;部分步骤&#xff09;7.设置数据库密码8.完成安装配置9.配置环境变量&#xff1a;10.验证安装&#xff…