[Qt][Qt 文件]详细讲解

目录

  • 1.输入输出设备类
  • 2.文件读写类
  • 3.文件和目录信息类


1.输入输出设备类

  • 在Qt中,⽂件读写的类为QFile,其⽗类为QFileDevice
    • QFileDevice提供了⽂件交互操作的底层功能
    • QFileDevice的⽗类是QIODevice,其⽗类为QObject
  • QIODevice是Qt中所有I/O设备的基础类
    • I/O设备就是能进⾏数据输⼊和输出的设备
    • 例如:⽂件,⽹络通信中的socket,串⼝、蓝⽛等通信接⼝,都是I/O设备,也都是从QIODevice继承来的
  • Qt中主要的一些I/O设备类的继承关系如下:
    • QFile:⽤于⽂件操作和⽂件数据读写的类,使⽤QFile可以读写任意格式的⽂件
    • QSaveFile:用于安全保存文件的类,适用于要写入大量的数据
      • 写文件的时候,往往会把旧的文件先清空,再写
        • 万一写的数据写一半,出错了,会导致新的数据用不了,旧的数据也没了
      • 该对象会自动把内容先写到临时文件里(不破坏原有的文件)
        • 等到所有内容都写完了,再把旧文件杀你到,并且用新文件替换旧文件
    • QTemporaryFile:用于创建临时文件的类,这个对象销毁,对应的文件就被自动删除了
      • 使用QTemporaryFile::open()就能创建⼀个⽂件名唯⼀的临时⽂件
    • QProcess:⽤于启动外部程序,并且可以给程序传递参数
      • 该类相当于是对fork()exec()操作进行的封装
    • QBuffer:以⼀个QByteArray对象作为数据缓冲区,将QByteArray对象当作⼀个I/O设备来读写
      请添加图片描述

2.文件读写类

  • 在Qt中,⽂件的读写主要是通过QFile类来实现,对于⽂件的操作主要有
    • 读数据read()readAll()readLine()
    • 写数据write()writeData()
    • 关闭⽂件:⽂件使⽤结束后必须⽤close()关闭⽂件
  • 使用
    • 访问⼀个设备之前,需要使⽤open()打开该设备,⽽且必须指定正确的打开模式
    • QIODevice中所有的打开模式由QIODevice::OpenMode枚举变量定义
      • QIODevice::NotOpen:没有打开设备
      • QIODevice::ReadOnly:以只读⽅式打开设备
      • QIODevice::WriteOnly:以只写⽅式打开设备
      • QIODevice::ReadWrite:以读写⽅式打开设备
      • QIODevice::Append:以追加⽅式打开设备,数据将写到⽂件末尾
      • QIODevice::Truncate:每次打开⽂件后重写⽂件内容,原内容将被删除
      • QIODevice::Text
        • 在读⽂件时,⾏尾终⽌符会被转换为\n
        • 当写⼊⽂件时,⾏尾终⽌符会被转换为本地编码
          • 如Win32上为\r\n
      • QIODevice::Unbuffered:⽆缓冲形式打开⽂件,绕过设备中的任何缓冲区
      • QIODevice::NewOnly:⽂件存在则打开失败,不存在则创建⽂件
  • 示例
    void MainWindow::ReadFile()
    {// 1. 先弹出 "打开文件" 对话框. 让用户选择打开哪个文件.QString path = QFileDialog::getOpenFileName(this);// 2. 根据用户选择的路径, 构造一个 QFile 对象, 并打开文件QFile file(path);if (!file.open(QFile::ReadOnly)) {return;}// 3. 读取文件QString text = file.readAll();// 4. 关闭文件, 千万不要忘记!file.close();// 5. 读到的内容设置到输入框中.edit->setPlainText(text);
    }void MainWindow::SaveFile()
    {// 1. 先弹出 "保存文件" 对话框.QString path = QFileDialog::getSaveFileName(this);// 2. 根据用户选择的路径, 构造一个 QFile 对象, 并打开文件QFile file(path);if (!file.open(QFile::WriteOnly)){return;}// 3. 写文件.const QString& text = edit->toPlainText();file.write(text.toUtf8());// 4. 关闭文件.
    

: file.close();
}
```


3.文件和目录信息类

  • QFileInfo是Qt提供的⼀个⽤于获取⽂件和⽬录相关属性的类
    • 例如:获取⽂件名、⽂件⼤⼩、⽂件修改⽇期等
  • QFileInfo类中提供了很多的⽅法,常⽤的有
    • isDir():检查该⽂件是否是⽬录
    • isExecutable():检查该⽂件是否是可执⾏⽂件
    • fileName():获得⽂件名
    • completeBaseName():获取完整的⽂件名
    • suffix():获取⽂件后缀名
    • completeSuffix():获取完整的⽂件后缀
    • size():获取⽂件⼤⼩
    • isFile():判断是否为⽂件
    • fileTime():获取⽂件创建时间、修改时间、最近访问时间等
  • 示例
    // 弹出文件对话框, 并获取到文件的属性信息
    QString path = QFileDialog::getOpenFileName(this);// 构造出一个 QFileInfo 对象
    QFileInfo fileInfo(path);// 打印相关属性
    qDebug() << fileInfo.fileName();
    qDebug() << fileInfo.suffix();
    qDebug() << fileInfo.path();
    qDebug() << fileInfo.size();
    qDebug() << fileInfo.isFile();
    qDebug() << fileInfo.isDir();
    

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

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

相关文章

统一待办集成方案:优化工作流,实现高效协作

在现代企业中&#xff0c;待办事项的管理往往分散在多个系统和工具中&#xff0c;这不仅导致信息孤岛&#xff0c;还可能影响工作效率和协作效果。为了解决这些问题&#xff0c;统一待办集成方案应运而生&#xff0c;它通过整合不同的待办事项管理系统&#xff0c;实现统一的任…

做无效私域,比不做还可怕!

这几年&#xff0c;市场上几乎80%的企业都在做同一件事&#xff1a;“私域”营销。 公众号、私域社群、企业微信、视频号……大家用的工具和平台都差不多&#xff0c;但运营效果却是天差地别。为什么很多企业的私域都做不起来&#xff0c;有的企业却做的风生水起&#xff0c;今…

图像识别,图片线条检测

import cv2 import numpy as np # 读取图片 img cv2.imread(1.png)# 灰度化 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 边缘检测 edges cv2.Canny(gray, 100, 200) 当某个像素点的梯度强度低于 threshold1 时&#xff0c;该像素点被认为是非边缘&#xff1b;当梯度强度…

未设置辅助手机的谷歌账号停用,申诉回来后登录需要手机验证,验证两次后成功恢复。

谷歌账号被停用后怎么办&#xff1f;果断申诉&#xff0c;申诉方法和模板等见我前面的文章或视频。 通常申诉以后1-2天会反馈结果&#xff0c;而且大部分&#xff08;80%以上&#xff09;会第一次就被审批通过&#xff0c;如下图所示&#xff1a; 当收到上面这样的邮件&#x…

【机器学习】探索数据矿藏:Python中的AI大模型与数据挖掘创新实践

&#x1f496; 前言&#xff1a;探索数据矿藏1. &#x1f4ca;数据获取与预处理&#xff1a;AI大模型的燃料1.1 &#x1f310;数据获取&#xff1a;多样性与规模并重1.2 &#x1f9f9;数据清洗与处理&#xff1a;提升数据质量1.3 &#x1f50d;特征工程&#xff1a;挖掘数据的深…

【C++】深度解析:用 C++ 模拟实现 priority_queue类,探索其底层实现细节(仿函数、容器适配器)

目录 ⭐前言 ✨堆 ✨容器适配器 ✨仿函数 ⭐priority_queue介绍 ⭐priority_queue参数介绍 ⭐priority_queue使用 ⭐priority_queue实现 ✨仿函数实现 ✨堆的向上调整和向下调整 ✨完整代码 ⭐前言 ✨堆 堆是一种特殊的树形数据结构&#xff0c;通常以二叉树的…

C/C++ 多线程[1]---线程创建+线程释放+实例

文章目录 前言1. 多线程创建2. 多线程释放3. 实例总结 前言 说来惭愧&#xff0c;写了很久的代码&#xff0c;一个单线程通全部。可能是接触的项目少吧&#xff0c;很多多线程的概念其实都知道&#xff0c;但是实战并没有用上。前段时间给公司软件做一个进度条&#xff0c;涉及…

[Qt][QSS][下]详细讲解

目录 1.样式属性0.前言1.盒模型(Box Model) 2.常用控件样式属性1.按钮2.复选框3.单选框4.输入框5.列表6.菜单栏7.注意 1.样式属性 0.前言 QSS中的样式属性⾮常多&#xff0c;不需要都记住&#xff0c;核⼼原则是⽤到了就去查 ⼤部分的属性和CSS是⾮常相似的 QSS中有些属性&am…

RK3588——网口实时传输视频

由于通过流媒体服务器传输画面延迟太高的问题&#xff0c;不知道是没有调试到合适的参数还是其他什么问题。诞生了这篇博客。 RK3588板端上接摄像头&#xff0c;采集画面&#xff0c;通过网口实时传输给上位机并显示。 第一代版本 RK3588代码 import cv2 import socket imp…

C++发送邮件:如何稳定实现邮件发送功能?

C发送邮件安全性探讨&#xff01;C编程中发送邮件的技巧&#xff1f; 邮件发送功能是许多应用程序的重要组成部分&#xff0c;无论是用于通知用户&#xff0c;还是用于自动化报告。AokSend将探讨如何在C环境中稳定地实现邮件发送功能&#xff0c;确保邮件能够可靠地到达收件人…

windows环境基于python 实现微信公众号文章推送

材料&#xff1a; 1、python 2.7 或者 python3.x 2、windows 可以通过 “python -m pip --version” 查看当前的pip 版本 E:\Downloads\newsInfo>python -m pip --version pip 20.3.4 from C:\Python27\lib\site-packages\pip (python 2.7) 3、windows 系统 制作&#xf…

云计算实训30——自动化运维(ansible)

自动化运维 ansible----自动化运维工具 特点&#xff1a; 部署简单&#xff0c;使用ssh管理 管理端与被管理端不需要启动服务 配置简单、功能强大&#xff0c;扩展性强 一、ansible环境搭建 准备四台机器 安装步骤 mo服务器&#xff1a; #下载epel [rootmo ~]# yum -y i…

windows主机查询url请求来自哪里发起的

最近使用fiddler抓包&#xff0c;看到一直有http://conna.gj.qq.com:47873 的请求&#xff0c; 对此进行溯源&#xff0c;确定是不是被攻击了。 在dos里查询端口进程&#xff1a;netstat -ano | findstr :47873 查到来自8020的进程id 查看此进程应用&#xff0c;发现竟然是…

C++ 设计模式——外观模式

外观模式 C 设计模式——外观模式主要组成部分1. 外观类&#xff08;Facade&#xff09;2. 子系统类&#xff08;Subsystem&#xff09;3. 客户端&#xff08;Client&#xff09; 例一&#xff1a;工作流程示例1. 外观类&#xff08;Facade&#xff09;2. 子系统类&#xff08;…

IT管理:我与IT的故事6--数字化建设规划工作坊圆满开展

在数字化浪潮席卷全球的时代背景下&#xff0c;企业的数字化转型已成为必然趋势。IT 部落精心打造的数字化规划实操工作坊顺利举办&#xff0c;为众多CIO的数字化转型之路点亮了明灯。 本次工作坊特别邀请到了业界知名的大咖讲师 Frank&#xff0c;他在数字化领域深耕多年&am…

【源码+文档+调试讲解】学院网站

摘 要 使用旧方法对冀中工程技师学院网站的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在冀中工程技师学院网站的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次…

Day23 第十站 文件IO的多路复用

#include <myhead.h>void insert_client(int *client_arr,int *len,int client) {//client_arr[n]{3,4} len&client_count,client_count2;//添加 5 client_arr[2(*len)]5(client)client_arr[*len]client;(*len); } int find_client(int *client_arr,int len,int clie…

Rembg.js - 照片去背景AI开发包

Rembg.js适用于为人物、建筑、电商产品等各种照片自动去除背景&#xff0c;可直接在浏览器内运行&#xff0c; 提供前端JavaScirpt二次开发接口。官方下载地址&#xff1a;Rembg.js图片去背景开发包 。 1、目录组织 Rembg.js开发包的目录组织说明如下&#xff1a; rembg …

RocketMQ源码分析 - 环境搭建

RocketMQ源码分析 - 环境搭建 环境搭建源码拉取导入IDEA调试1) 启动NameServer2) 启动Broker3) 发送消息4) 消费消息 环境搭建 依赖工具 JDK&#xff1a;1.8MavenIntellij IDEA 源码拉取 从官方仓库 https://github.com/apache/rocketmq clone或者download源码。 源码目录…

【题目/训练】:双指针

引言 我们已经在这篇博客【算法/学习】双指针-CSDN博客里面讲了双指针、二分等的相关知识。 现在我们来做一些训练吧 经典例题 1. 移动零 思路&#xff1a; 使用 0 当做这个中间点&#xff0c;把不等于 0(注意题目没说不能有负数)的放到中间点的左边&#xff0c;等于 0 的…