Qt文件系统源码分析—第五篇QTemporaryFile

news2024/11/20 15:26:28

深度

本文主要分析Windows平台,Mac、Linux暂不涉及

本文只分析到Win32 API/Windows Com组件/STL库函数层次,再下层代码不做探究

本文QT版本5.15.2

类关系图

QTemporaryFile继承QFile

QFile、QSaveFile继承QFileDevice

QFileDevice继承QIODevice

QIODevice、QFileSystemWatcher继承QObject

QLockFile、QFileInfo、QDir、QFileSelector无任何继承关系

QObject中有一指向QObjectData指针d_ptr。d_ptr是保护成员变量,这意味着每个子类可以修改d_ptr内容。在QObject中d_ptr指向QObjectPrivate,

QIODevice中d_ptr指向QIODevicePrivate

QFileDevice中d_ptr指向QFileDevicePrivate

QFile中d_ptr指向QFilePrivate

QTemporaryFile中d_ptr指向QTemporaryFilePrivate

QFileInfo、QDir、QLockFile不继承QObject,因此没有指向QObjectData指针d_ptr。但是各自同样声明了d_ptr变量指向各自的private类

QFileInfo中d_ptr指向QFileInfoPrivate

QDir中d_ptr指向QDirPrivate

QLockFile中d_ptr指向QLockFilePrivate

启发:

这种Private类书写方式适合场景是导出接口稳定、不想公开内部实现细节、内部能够灵活修改

可以用在付费插件、软件逆向等使用场景

QTemporaryFile

作用

创建临时文件,临时文件为输入文件路径+符号“.”+6个随机字符

使用示例

#include <QTemporaryFile>

int main(int argc, char* argv[])

{

QTemporaryFile file("D:/hx1.txt");

auto h = file.autoRemove();

auto h2 = file.open();

auto h3 = file.fileTemplate();

file.write("hello QTemporaryFile");

return 0;

}

主要函数调用流程及原理

此类无论是文件创建还是读写关闭都是调用QFile实现对应功能,唯一值得注意的是创建临时文件流程。

QTemporaryFile::Open

QTemporaryFile中QFileDevicePrivate::fileEngine是指向的QTemporaryFileEngine,最终调用到std::generate创建6位数的随机数。

注意并不是所有都是6位随机数

写到最后

目前先写到这,诸位无论是有什么意见或建议都可以写到评论区,下来一起探讨

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

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

相关文章

如何查看一个 docker 镜像有哪些版本

如何查看一个 docker 镜像有哪些版本 因为通过 docker search 并不能查看某个镜像的版本信息&#xff0c;如我需要特定版本的 redis 那怎么办呢~ 本文提供了如下几种方式&#xff0c;大家可以分别逐个尝试下~ 为什么有几种方式呢&#xff0c;因为官方的查找镜像网址 Docker H…

使用audition测试USBaudio数据回传延时

一&#xff0c;简介 本文主要介绍如何使用Audition软件来测试STM32 USB audio上行音频数据的延时。 二&#xff0c;准备工作 Audition&#xff0c;ASIO驱动&#xff0c;STM32枚举的USB Audio高速声卡测试板。 二&#xff0c;硬件连接 将STM32的IIS的data in和data out使用…

四款AI视频翻译产品横评

本文内容节选自 Paxi.ai 的文章分享&#xff0c;从其中摘录了我觉得有意思的一部分。Paxi.ai 是一个基于 GPT-4 打造的帮用户快速使用AI的AI工具&#xff0c;通过与它的小助手对话可以了解各种AI的产品功能和使用方式。对本文内容感兴趣的朋友可以上他们官网查看。 有没有想过把…

go embed 实现gin + vue静态资源嵌入

前言 golang1.16出来以后&#xff0c;早就有打算把ckman项目的前端代码打包更换成embed。在此之前&#xff0c;使用的是pkger进行的打包。 但是今天打包时却报了个错&#xff1a; 而且通过各种手段尝试均无果之后&#xff0c;果断把决定立即将其更换为embed进行资源嵌入管理。…

华为OD机试真题 Java 实现【寻找符合要求的最长子串】【2023Q1 200分】

一、题目描述 给定一个字符串 s &#xff0c;找出这样一个子串&#xff1a; 该子串中的任意一个字符最多出现2次&#xff1b;该子串不包含指定某个字符&#xff1b; 请你找出满足该条件的最长子串的长度。 二、输入描述 第一行为要求不包含的指定字符&#xff0c;为单个字…

一个神奇的工具,让URL地址都变成了“ooooooooo“

一个神奇的工具&#xff0c;让URL地址都变成了"ooooooooo" 一、核心代码二、URL编码/解码 最近发现一个有意思工具&#xff0c;就是将一个URL地址转换为都是 ooooooooo 的样子&#xff0c;通过转换后的地址访问可以转换回到原始地址&#xff0c;转换的逻辑有点像短链…

mysql8绿色版安装教程

最近在安装mysql8绿色版&#xff0c;以下是安装过程中的一些步骤&#xff1a; 1&#xff1a;解压zip压缩包至想要安装的目录&#xff0c;比如解压到D:\mysql\mysql-8.0.29-winx64 2&#xff1a;在解压目录D:\mysql-8.0.29-winx64中创建MySQL配置文件my.ini 配置文件my.ini内容…

Unity3D安装:离线安装 Unity

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 在没有 Hub 的情况下离线安装 Unity Unity 下载助手 (Download Assistant) 支持离线部署。在这种部署方式中&#xff0c;可下载用于安装 Unity 的所有文件&#xff0c;然后生成脚本…

【日常】如何增加粉丝的粘性?

【日常】如何增加粉丝的粘性&#xff1f; 1、前言2、官方活动3、作品质量4、打造自己的社区 1、前言 不知不觉间&#xff0c;铁粉已经过千了&#xff0c;粉丝数也即将两万&#xff0c;总而言之&#xff0c;越努力&#xff0c;越幸运&#xff0c;付出就有回报&#xff08;当然在…

面了个阿里拿36K出来的,真是砂纸擦屁股,给我漏了一手

今年的春招已经结束&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c;他山之石…

减肥瘦身自律APP软件开发功能有哪些?

减肥瘦身是很多女人一生都在奋斗的目标&#xff0c;如果找不对方法&#xff0c;减肥效果事倍功半还可能会反弹&#xff0c;所以越来越多的人推崇健康科学的减肥理念&#xff0c;把瘦身的重心转移到饮食和运动管理上&#xff0c;于是市场上出现了减肥瘦身自律类的APP软件&#x…

一位27岁软件测试员,测试在职近5年,月薪还不到2W,担心被应届生抢走饭碗

工作了近5年&#xff0c;一个月工资不到20K&#xff0c;担心被应届毕业生取代&#xff01;互联网的快速发展伴随着员工适者生存的加速&#xff0c;测试员的薪资也在不断增长&#xff0c;以3年、5年、8年为一条分水岭。如果人们的能力和体力不够&#xff0c;他们就会被淘汰。看起…

leetcode 146.LRU 缓存

题目链接&#xff1a;leetcode 146 1.题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0…

第四届全国人工智能大赛答疑分享会等你围观

为了帮助参赛团队更精准地理解赛题、更合理地运用AI相关技术&#xff0c;第四届全国人工智能大赛组委会诚邀鹏城实验室副研究员杨文瀚老师为大家进行AI视觉特征编码赛题解析与答疑&#xff0c;并分享《交通场景下的高效紧致特征表达》。 此次答疑分享会将于5月26日&#xff08…

供应商管理软件如何帮助企业提高盈利能力?

为了在当今快节奏的商业环境中保持竞争力和刺激增长&#xff0c;供应商管理技术正变得至关重要。供应商管理是任何公司最关键的因素之一&#xff0c;其中包括考核供应商、采购及招投标管理、协同管理等多项任务。 随着成熟的供应商管理软件的出现&#xff0c;企业主现在可以优…

三大特性之多态

文章目录 静态的多态动态的多态虚函数虚函数的重写&#xff08;覆盖&#xff09;利用虚函数重写实现多态重写的两个例外1.协变2.析构函数的函数名不同 C11的override和final 重载&#xff0c;重写&#xff08;覆盖&#xff09;&#xff0c;重定义&#xff08;隐藏&#xff09;抽…

什么是客户旅程,为什么它很重要?

多年来&#xff0c;企业专注于客户接触点来衡量客户满意度。近年来&#xff0c;企业已经看到接触点并不能捕捉到全貌。客户接触点只能在一个时间点衡量满意度。他们不一定保证客户对他们的整个旅程感到满意。但什么是客户接触点&#xff1f;是客户与企业互动的特定时刻&#xf…

怎么格式化只读U盘?

用户在格式化期间遇到磁盘只读&#xff08;写保护&#xff09;问题是比较常见的。通常&#xff0c;如果你的U盘处于写保护状态&#xff0c;则它便是只读&#xff0c;不允许你删除或修改U盘上的任何文件&#xff0c;以保护U盘的数据安全。如果需要只读u盘怎么格式化的问题&#…

免费的SVG在线编辑器大推荐

随着响应网络的发展&#xff0c;越来越多的高质量的SVG在线编辑器被公众所熟知。SVG矢量图形也越来越受欢迎&#xff0c;以便在任何设备上呈现图像&#xff0c;甚至一些易于使用的SVG在线编辑器&#xff0c;可以替代PS&#xff0c;本文总结了五种流行的SVG在线编辑器。 1.即时…

使用Windbg静态分析dump文件的完整过程介绍

目录 1、概述 2、静态分析dump文件的一般步骤 2.1、查看异常类型 2.2、使用.ecxr命令切换到发生异常的线程上下文&#xff0c;查看发生异常的那条汇编指令 3、问题分析实例说明 4、使用Windbg详细分析dump文件&#xff0c;展现完整分析过程 4.1、查看异常类型和发生崩溃…