Windows系统编程 - 目录操作、磁盘、卷信息
前言
- 各位师傅大家好,我是qmx_07,今天继续讲解Windows系统编程的相关知识:目录操作

目录
目录操作
创建目录
- 通过CreateDirectory函数创建目录
原型:
BOOL CreateDirectoryA([in] LPCSTR lpPathName,//目录名称[in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes//安全属性,对目录的访问权限,NULL表示默认的安全属性
);

删除目录
-
使用RemoveDirectory函数删除目录
RemoveDirectory(源文件)

-
注意:使用该函数只能删除空目录,如果该目录有文件,遍历删除文件,再使用该函数
遍历目录文件(模仿dir命令)
WIN32_FIND_DATA
- 一般使用_WIN32_FIND_DATA来存储文件的信息,下面了解一下存储了哪些内容:
typedef struct _WIN32_FIND_DATA {DWORD dwFileAttributes;//文件属性 比如是文件,或者是目录FILETIME ftCreationTime;//文件目录的创建时间FILETIME ftLastAccessTime;//最后的访问时间FILETIME ftLastWriteTime;//最后的写入时间DWORD nFileSizeHigh;//存储的高位DWORDDWORD nFileSizeLow;//存储的低位DWORDDWORD dwReserved0;//保留内容DWORD dwReserved1;//保留内容CHAR cFileName[MAX_PATH];//文件名称CHAR cAlternateFileName[14];//文件备用名称}
- 文件名称、创建时间、最近的读取、写入时间、文件大小等数据
时间戳及转换

- 我们使用FindFirstFile函数查找qmx.ini文件,将数据存储到FindFileData中,打印文件名称和创建时间
- 但是可以观察到 创建时间是一堆数字,并不能直接看到日期
时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(不考虑闰秒),用于表示一个时间点

需要使用SYSTEMTIME和FileTimeToSystemTime函数,来进行转换日期
SYSTEMTIME 和 FileTimeToSystemTime
typedef struct _SYSTEMTIME {WORD wYear;//年WORD wMonth;//月WORD wDayOfWeek;//星期WORD wDay;//天WORD wHour;//小时WORD wMinute;//分钟WORD wSecond;//秒钟WORD wMilliseconds;//毫秒
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
BOOL FileTimeToSystemTime([in] const FILETIME *lpFileTime,//FileTime的指针,也就是时间戳[out] LPSYSTEMTIME lpSystemTime//SystemTime指针,用来将时间戳转换到日期存储
);
- 使用FileTimeToSystemTime函数将时间戳存储到SYSTEMTIME中,将时间戳转换成年月日时分秒,以此来打印数据
文件常量类型

- 这些是常用到的文件类型
实现
WIN32_FIND_DATA FindFileData;HANDLE hFile = FindFirstFile("G:\\win_file\\test\\*", &FindFileData);if (INVALID_HANDLE_VALUE == hFile){std::cout << "FindFirstFile Faild" << std::endl;std::cout << GetLastError() << std::endl;}do{SYSTEMTIME SystemTime;FileTimeToSystemTime(&FindFileData.ftCreationTime, &SystemTime);std::cout << SystemTime.wYear << "-" << SystemTime.wMonth<<"-"<<SystemTime.wDay<<" ";if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){std::cout << "<DIR>" << " ";}std::cout << FindFileData.cFileName << std::endl;} while (FindNextFile(hFile, &FindFileData));
- 逻辑:通过遍历目录文件,依次打印时间,文件名称
- FindNextFile用来查找下一个文件
- FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY 判断文件是否是目录
- 画面演示:

卷
CHAR VolumeName[MAX_PATH] = { 0 };//用于存储卷的名称DWORD VolumeSerialNum;//存储卷的序列号DWORD MaxComponentLength;//存储文件名的最大长度DWORD SysFlags;//卷的特性信息CHAR FileSystem[MAX_PATH] = { 0 };//存储文件系统名称GetVolumeInformation("D:\\", VolumeName, MAX_PATH, &VolumeSerialNum, &MaxComponentLength,&SysFlags, FileSystem,MAX_PATH);

- GetVolumeInformation函数用于获取卷信息
磁盘
BOOL GetDiskFreeSpaceA([out] LPDWORD lpSectorsPerCluster,//用于获取指定磁盘卷中每个簇包含的扇区数量[out] LPDWORD lpBytesPerSector,//用于获取指定磁盘卷中每个扇区包含的字节数[out] LPDWORD lpNumberOfFreeClusters,//用于获取指定磁盘卷中当前空闲的簇的数量[out] LPDWORD lpTotalNumberOfClusters//用于获取指定磁盘卷中总的簇的数量
);
- lpSectorsPerCluster * lpBytesPerSector 空闲空间大小 = 空闲簇数量 × 簇大小
- lpSectorsPerCluster和lpBytesPerSector 计算磁盘总大小
总结
- 学习了目录的相关知识 了解 时间戳 遍历文件 模拟dir命令、以及卷,磁盘 使用windows api查看相关信息
相关文章:
Windows系统编程 - 目录操作、磁盘、卷信息
前言 各位师傅大家好,我是qmx_07,今天继续讲解Windows系统编程的相关知识:目录操作 目录 目录操作 创建目录 通过CreateDirectory函数创建目录 原型: BOOL CreateDirectoryA([in] LPCSTR lpPathName,//目录名称[in, opt…...
搭建SaaS知识库:优化教育机构的在线教学效能
随着信息技术的飞速发展,教育领域正经历着前所未有的变革。在线教学已成为教育机构提供灵活学习体验、扩大覆盖范围、提升教学效率的重要手段。然而,如何在海量资源与复杂教学场景中高效管理知识,确保教学质量,成为教育机构面临的…...
CSS中backdrop-filter详解
文章目录 CSS中backdrop-filter详解一、引言二、backdrop-filter基础1、基本概念1.1、基本语法 2、滤镜函数2.1、代码示例 三、实际应用1、创建模糊背景1.1、代码示例 2、结合其他CSS属性2.1、代码示例 四、总结 CSS中backdrop-filter详解 一、引言 在现代网页设计中…...
AI测试入门:理解 LLM 的基准测试(Benchmark)
AI测试入门:理解 LLM 的基准测试(Benchmark) 1. 基准测试的定义2. 基准测试的目的3. 基准测试的常用指标4. 基准测试的流程5. 常用的AI基准测试框架总结1. 基准测试的定义 LLM 的基准测试是一种评估 LLM 的标准化方法,通过使用预定义的数据集、任务和评估指标,对LLM 在特定…...
InternVid:用于多模态视频理解与生成的大规模视频-文本数据集 | ICLR Spotlight
InternVid 是一个开源的大规模视频-文本数据集,旨在促进视频理解和生成任务的发展,由上海人工智能实验室与南京大学、中国科学院等单位联合发布,相关的工作已经被ICLR2024接收。它包含超过 700 万个视频,总时长近 76 万小时&#…...
Hive数仓操作(十)
一、Hive 分页查询 在大数据处理中,分页查询是非常常见的需求。Hive 提供了 LIMIT 和 OFFSET 关键字来方便地进行分页操作。本文将详细介绍它们的用法。 1. 基本用法 LIMIT:用于限制查询结果的行数。OFFSET:用于指定从哪一行开始检索。 2…...
Android 扩大View的点击区域
文章目录 Android 扩大View的点击区域使用padding属性使用TouchDelegate使用getLocationOnScreen监听 Android 扩大View的点击区域 使用padding属性 通过设置 padding 属性扩大点击区域。 使用: <?xml version"1.0" encoding"utf-8"?&…...
[Qt学习笔记] 解决QTextEdit数据过多UI卡死问题
背景问题 在项目中使用QTextEdit显示软件的日志信息,由于在连续输出日志信息,刚开始QTextEdit显示没什么问题,长时间就会出现UI界面卡死,内存占用变高。晚上查了说QTextEdit的append函数如果不释放会累计增加内存,包括…...
OgreNext高级材质中增加线宽,点大小,虚线模式绘制支持
修改Ogre高级材质系统,增加线宽,点大小,虚线模式,虚线参数的支持,效果如下: 需要修改的代码文件如下: 修改如下 代码文本: //范围[0.2 - 51] 0.2 * [0,255];Ogre::uint8 mLineWidth;//范围[…...
STM32中的DMA数据转运——下篇
STM32中的DMA数据转运——上篇-CSDN博客 在上篇文章中,我们讨论了STM32中的DMA(直接存储器访问)及其工作原理、存储器类型和总线设计。接下来,我们将更深入地探讨DMA的具体配置方法、常见应用场景以及一些实际设计中的注意事项。…...
51单片机的智能小区安防系统【proteus仿真+程序+报告+原理图+演示视频】
1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块时钟模块温度传感器烟雾传感器CO传感器红外感应传感器IC卡蓝牙继电器按键、蜂鸣器、LED等模块构成。适用于智能小区安防、智能家居安防等相似项目。 可实现功能: 1、LCD1602实时显示北京时间、温度、烟雾浓度和CO浓…...
数仓建模流程
数仓建模简介 一句话总结 数仓建模中的“建模”是一个将数据有序组织和存储起来的过程,旨在提高数据的使用效率和降低使用成本。 详细描述 在数仓建模中,“建模”指的是构建数据模型,也就是数据的组织和存储方法。数据模型强调从业务、数…...
Neo4j CQL语句 使用教程
CREATE命令 : CREATE (<node-name>:<label-name>{ <Property1-name>:<Property1-Value>........<Propertyn-name>:<Propertyn-Value>} )字段说明 CREATE (dept:Dept { deptno:10,dname:“Accounting”,location:“Hyderabad” })&#…...
STM32-HAL库 驱动DS18B20温度传感器 -- 2024.10.8
目录 一、教程简介 二、驱动理论讲解 三、CubeMX生成底层代码 四、Keil5编写代码 五、实验结果 一、教程简介 本教程面向初学者,只介绍DS18B20的常用功能,但也能满足大部分的运用需求。跟着本教程操作,可在10分钟内解决DS18b20通信难题。…...
HTML 符号
HTML 符号 HTML(超文本标记语言)是一种用于创建网页的标准标记语言。它使用一系列的标签来描述网页的结构和内容。HTML 符号,通常指的是 HTML 标签,是构成 HTML 文档的基础。本文将详细介绍 HTML 符号的概念、种类、用途以及如何在网页设计中正确使用它们。 HTML 符号的概…...
编译后的MySQL安装
MySQL安装 1.下载网址2.下载方式3.配置配置环境变量修改配置文件初始化安装服务启动服务测试修改 Mysql 默认密码 1.下载网址 https://dev.mysql.com/downloads/mysql/2.下载方式 选择对应版本下载 mysql-xxx-winx64.zip,该压缩包为编译后文件,并非源码…...
Ubuntu安装Apache教程
系统版本:Ubuntu版本 23.04 Ubuntu是一款功能强大且用户友好的操作系统,而Apache是一款广泛使用的Web服务器软件。在Ubuntu上安装Apache可以帮助用户搭建自己的网站或者进行Web开发。为大家介绍如何在Ubuntu上安装Apache,并提供详细的教程和操…...
Nginx跳转模块之location与rewrite
目录 一、location模块与rewrite模块区别 二、location模块的基本介绍 1. location模块是什么? 2. 三种匹配类别 3. 常用的匹配规则 4. 匹配优先级 三、location模块使用实例 1.精准匹配优先级小于一般匹配的特殊情况 2 .解决方法 3. 实际网站使用中的三个匹配…...
oracle col命令
oracle col命令可以对列进行进行格式化,格式:col 列名 for(mat) 格式 例如: col owner for a100 设置owner列格式 col 列名:显示当前列的格式 SQL> col owner COLUMN owner ON FORMAT a100 SQL> clear column:清除所有列的格式 SQL> col o…...
ESP32接入扣子(Coze) API使用自定义智能体
使用ESP32接入Coze API实现聊天机器人的教程 本示例将使用ESP32开发板通过WiFi接入 Coze API,实现一个简单的聊天机器人功能。用户可以通过串口向机器人输入问题,ESP32将通过Coze API与智能体进行通信,并返回对应的回复。本文将详细介绍了如…...
如何5分钟完成浏览器脚本安装:免费网盘直链解析工具终极指南
如何5分钟完成浏览器脚本安装:免费网盘直链解析工具终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 …...
性能优化实战:在Unity项目里管理多个Video Player,如何避免内存泄漏和卡顿?
Unity多视频管理实战:规避内存泄漏与卡顿的深度优化策略 在沉浸式游戏体验和交互式AR/VR应用中,视频内容已成为提升用户参与度的关键要素。但当场景中同时存在多个Video Player组件时,开发者往往会遭遇突如其来的性能断崖——内存占用飙升、播…...
G-Helper深度解析:华硕笔记本的终极轻量级控制方案
G-Helper深度解析:华硕笔记本的终极轻量级控制方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exper…...
Keil MDK中HEX文件未生成的8.3路径问题解析
1. 问题现象与背景解析 在嵌入式开发领域,Keil MDK(Microcontroller Development Kit)是广泛使用的集成开发环境,尤其针对C166系列微控制器。最近遇到一个典型问题:开发者在Vision1环境中配置了L166链接器和OH166 HEX转…...
Beam Search不是训练用的!搞懂它在NLP模型评估中的正确打开方式
Beam Search在NLP模型评估中的正确实践指南 当你在调试一个文本生成模型时,是否遇到过这样的困惑:训练时指标表现优异,实际生成时却频频输出不连贯的句子?这往往源于对序列生成任务中关键环节——推理阶段解码策略的误解。许多开发…...
国网智能电表解决方案:从HPLC通信到远程费控的架构与实战
1. 项目概述:从一块电表到一套能源数据中枢如果你家里最近换了新电表,或者从事与园区、工厂能源管理相关的工作,大概率会接触到一种外观更简洁、带液晶屏、还能远程抄表的智能电表。这背后,就是国网电能表解决方案的落地体现。它早…...
Stream Deck与Arduino打造物联网信息看板:软硬云结合实战
1. 项目概述:打造你的专属物理信息看板如果你和我一样,是个桌面极客或者直播爱好者,那你对Elgato的Stream Deck一定不陌生。这个小玩意儿最初是为直播设计的,可以一键切换场景、播放音效,堪称效率神器。但它的潜力远不…...
告别虚拟机卡顿:在VMware 17上为RHEL 9.2分配CPU和内存的黄金法则
告别虚拟机卡顿:在VMware 17上为RHEL 9.2分配CPU和内存的黄金法则 当你在VMware Workstation 17上运行RHEL 9.2时,是否经常遇到编译速度慢、桌面响应延迟甚至整个系统卡死的情况?这很可能是因为你没有根据宿主机的实际硬件情况科学分配虚拟资…...
轻松管理AD域:一款基于.NET的Web工具推荐
轻松管理AD域:一款基于.NET的Web工具推荐 【下载地址】AD域管理Web版工具 本资源提供了一个基于微软官方文档,使用.NET技术开发的Web AD域管理工具。该工具采用简单的HTML和一般处理程序(Generic Handler)来实现,旨在为…...
5分钟掌握STDF-Viewer:半导体测试数据分析的图形化神器
5分钟掌握STDF-Viewer:半导体测试数据分析的图形化神器 【免费下载链接】STDF-Viewer A free GUI tool to visualize STDF (semiconductor Standard Test Data Format) data files. 项目地址: https://gitcode.com/gh_mirrors/st/STDF-Viewer STDF-Viewer是一…...
