Qt文件系统源码分析—第二篇QFileInfo

news2024/11/23 21:54:56

深度

本文主要分析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类书写方式适合场景是导出接口稳定、不想公开内部实现细节、内部能够灵活修改

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

QFileInfo

作用

获取文件的相关属性

使用示例

#include <QFileInfo>

#include <QDir>

#include <QDateTime>

#include <QDebug>

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

{

QFileInfo file("D:/1.txt");

file.absoluteDir();

file.absolutePath();

file.fileName();

file.absoluteFilePath();

file.absolutePath();

file.baseName();

file.birthTime();

file.caching();

file.bundleName();

file.canonicalFilePath();

file.canonicalPath();

file.completeBaseName();

file.completeSuffix();

file.created();

file.dir();

file.exists();

file.fileName();

file.filePath();

file.group();

file.groupId();

file.isAbsolute();

file.isBundle();

file.isDir();

file.isExecutable();

file.isFile();

file.isReadable();

file.isRelative();

file.isRoot();

file.isHidden();

file.isNativePath();

file.isShortcut();

file.isSymLink();

file.isWritable();

file.lastModified();

file.lastRead();

file.makeAbsolute();

file.owner();

file.ownerId();

file.path();

file.permissions();

file.refresh();

return 0;

}

主要函数调用流程及原理

QFileInfo::absolutePath

获取文件目录的绝对路径,此函数仅字符串操作。将目标路径通过分割符计算出目录位置,如果本身为目录,获取上一级目录。

QFileInfo::absoluteFilePath

获取文件的绝对路径,此函数仅字符串操作

QFileInfo::completeSuffix

获取文件的后缀名。注意为了兼容,第一个“.”以后都是后缀

QFileInfo::group

获取文件所属用户组,windows下无效

QFileInfo::isDir

文件是否为目录

QFileInfo::isFile

目标路径是否为文件

QFileInfo中关于路径文件名操作大都是字符串操作

获取文件属性的都是通过QFileSystemEngine::fillMetaData调用GetFileAttributesEx获取

写到最后

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

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

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

相关文章

考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化

目录 1 主要内容 2 部分程序 3 程序结果 4 程序链接 1 主要内容 “双碳”背景下&#xff0c;为提高能源利用率&#xff0c;优化设备的运行灵活性&#xff0c;进一步降低综合能源系统&#xff08;IES&#xff09;的碳排放水平&#xff0c;提出一种IES低碳经济运行策略。首先…

【牛客刷题】笔试选择题整理(day1-day2)

每天都在进步呀 文章目录 1. 小数求模运算2. 进程的分区&#xff0c;这里说的不是JVM的分区。进程中&#xff0c;方法存放在方法区。3. 访问权限控制4. 继承与多态5. 与equals()6. 类加载顺序7. super()与this()7.1 super7.1.1 super调用父类构造方法7.1.2 super调用父类属性和…

Jabil EDI项目开源介绍

近期为了帮助广大用户更好地使用EDI系统&#xff0c;我们根据以往的项目实施经验&#xff0c;将成熟的EDI项目进行开源。用户安装好知行之桥EDI系统之后&#xff0c;只需要下载我们整理好的示例代码&#xff0c;并放置在知行之桥指定的工作区中&#xff0c;即可开始使用。 今天…

低代码工具库IRenderer『即可体验』上线了

在经历一段时间的折腾后&#xff0c;IRenderer迎来了一次版本更新&#xff0c;除了修复若干bug、优化编辑器性能外&#xff0c;在官网也添加了playground『即刻体验』入口。让您可以在线感受IRenderer可以提供的便利。 官网(github.io打开速度较慢&#xff0c;请稍等忍耐)地址…

SpringBoot——配置文件的分类

简单介绍&#xff1a; 在之前我们写配置文件的时候&#xff0c;我们直接在项目中的resources下面编写的配置文件&#xff0c;其实除了在这个路径下编写配置文件&#xff0c;还可以在其他的地方编写配置文件&#xff0c;并且不同位置的配置文件在启动的时候的优先级也是不一样的…

Srping注解之@Async:SpringBoot 实现异步调用

目录 1&#xff1a;前言 2&#xff1a;如何创建线程池 3&#xff1a;自定义线程池 1&#xff1a;前言 在日常开发过程中&#xff0c;会遇到一些需求是和主业务逻辑低耦合的&#xff0c;不要求和主业务逻辑同步进行&#xff0c;比如记录日志信息、发送消息通知电子邮件、生成…

Elasticsearch:使用 count API 来获得所有文档的个数

在我开始使用 Elasticsearch 的时候&#xff0c;我希望获得给定查询的文档总数。比如我们想对数据进行分页显示。从 Elasticsearch 7.0之后&#xff0c;为了提高搜索的性能&#xff0c;在 hits 字段中返回的文档数有时不是最精确的数值。Elasticsearch 限制了最多的数值为10000…

【开发者指南】如何在MyEclipse中编辑HTML或JSP文件?(一)

MyEclipse v2022.1.0正式版下载 如果您有HTML或JSP文件要编辑&#xff0c;这里将介绍如何编辑。查找以下信息&#xff1a; 编辑源代码大纲和属性视图参数页面 该功能在MyEclipse中是可用的。 一、HTML / JSP编辑器 要编辑HTML或JSP文件&#xff0c;请执行以下操作当中的一…

IPWorks BLE 2022 .NET Edition 22.0.8 Crack

IPWorks BLE 2022 .NET是一个蓝牙低功耗组件库&#xff0c;提供对 BLE 操作的直接访问。IPWorks BLE 组件提供简单的服务发现和对支持 BLE 的设备的访问。 蓝牙库 低功耗蓝牙组件 IPWorks BLE 包括一组功能强大的组件&#xff0c;用于将低功耗蓝牙通信功能集成到 Web、桌面和移…

Liunx 套接字编程(1)UDP协议的操作且实现一个UDP通信客户端

1.套接字编程 主要讲解的就是如何编写一个网络通信程序 1.网络通信的数据中都会包含一个完整的五元组: sip,sport,dip,dport,protocol(源端IP&#xff0c;源端端口&#xff0c;对端IP&#xff0c;对端端口&#xff0c;协议) 五元组完整的描述了数据从哪来&#xff0c;到哪去&am…

平抑风电波动的电-氢混合储能容量优化配置(matlab代码)

目录 1 主要内容 2 部分程序 3 程序结果 4 程序链接 1 主要内容 该程序部分复现电机文章《平抑风电波动的电-氢混合储能容量优化配置》&#xff0c;针对电-氢混合系统协同平抑接入新型电力系统的新能源波动问题&#xff0c;提出考虑碱性电解槽运行特性的电-氢混合储能容量…

D. Array Restoration(st表 O(1)查询区间最值)

Problem - D - Codeforces 给定一个由n个整数组成的初始数组a&#xff0c;位置从1到n编号。 对该数组执行q次查询&#xff0c;每次查询选择一个区间[li, ri]&#xff08;1≤li≤ri≤n&#xff09;&#xff0c;并将该区间内所有元素的值都改为i。查询的顺序不能更改&#xff0c…

企业多个文件存储系统并行使用,IT人员如何统一高效管理?

文件存储系统在企业内部应用广泛&#xff0c;各个企业使用习惯各不相同。很多企业在业务开展中&#xff0c;由于内部业务结构复杂、部门间文件存储习惯差异化、需要与外部合作伙伴进行数据文件交换等原因&#xff0c;会出现企业内部多个文件存储系统并行使用的情况。 对于IT技术…

IPB60R950C6-ASEMI代理英飞凌高压MOS管IPB60R950C6

编辑&#xff1a;ll IPB60R950C6-ASEMI代理英飞凌高压MOS管IPB60R950C6 型号&#xff1a;IPB60R950C6 品牌&#xff1a;Infineon(英飞凌) 封装&#xff1a;TO-263 最大漏源电流&#xff1a;12A 漏源击穿电压&#xff1a;600V RDS&#xff08;ON&#xff09;Max&#xff…

关于全志T113开发板接7寸LCD屏幕显示异常问题的解决方案

在入手全志T113之后&#xff0c;第一时间移植好了之前6ull平台的rootfs。但是在测试QT的过程中发现屏幕最右侧有一部分显示不正常&#xff0c;经过初步推测应该是RGB行场同步时序有问题。本以为在设备树里面稍作修改之后就能OK&#xff0c;但是居然前前后后一共花了至少三个星期…

期刊介绍|骨科老牌期刊,无版面费,审稿极速,毕业不二之选!

今天给大家介绍一本中药方面的期刊&#xff1a;JOURNAL OF ORTHOPAEDIC RESEARCH 一、基本信息 1、期刊名称&#xff1a;JOURNAL OF ORTHOPAEDIC RESEARCH&#xff1b; 2、期刊ISSN: 0736-0266&#xff1b; 3、研究方向&#xff1a;医学-整形外科&#xff1b; 4、出版社&#x…

AI怎么把游戏变好玩?米哈游出手了

《原神》发布两年半后&#xff0c;游戏新贵米哈游终于出新&#xff0c;上线了《崩坏:星穹铁道》。新游戏的一大亮点是内置了一个“图生图”的AIGC工具&#xff0c;用户可上传任何图片&#xff0c;生成对应风格的游戏角色“三月七”。 广大玩家脑洞大开&#xff0c;短短一周时间…

专业的图像编辑软件Affinity Photo 2.04版本在win10系统的下载与安装配置教程

目录 前言一、Affinity Photo安装二、使用配置总结 前言 Affinity Photo 是一款专业的图像编辑软件&#xff0c;提供了很多强大的工具和功能。 一些常用工具的介绍&#xff1a; 选择工具 ——矩形选择工具&#xff1a;用于选择矩形区域。 ——椭圆选择工具&#xff1a;用于选…

Android 网络编程基础

Android 网络编程是一个重要的开发技能&#xff0c;可以让我们的应用程序更加丰富、实用。需要开发者根据实际需求选择合适的网络通信方式&#xff0c;并结合安全协议和数据传输加密算法等措施&#xff0c;以保证数据传输的安全性和可靠性。 网络协议 在 Android 网络编程中&a…

虚拟环境中的 CPU 优化技巧

近年来&#xff0c;虚拟化已成为管理计算资源的主流方式&#xff0c;使用户能够在一台机器上运行多个操作系统和应用程序。虚拟化虽然带来了许多好处&#xff0c;例如更好的资源利用和更大的灵活性&#xff0c;但在优化CPU性能方面也带来了挑战。 在本文中&#xff0c;我们将探…