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;//存储的高位DWORD
  DWORD    nFileSizeLow;//存储的低位DWORD
  DWORD    dwReserved0;//保留内容
  DWORD    dwReserved1;//保留内容
  CHAR     cFileName[MAX_PATH];//文件名称
  CHAR     cAlternateFileName[14];//文件备用名称
  }
  • 文件名称、创建时间、最近的读取、写入时间、文件大小等数据
时间戳及转换

在这里插入图片描述

  • 我们使用FindFirstFile函数查找qmx.ini文件,将数据存储到FindFileData中,打印文件名称和创建时间
  • 但是可以观察到 创建时间是一堆数字,并不能直接看到日期

时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(不考虑闰秒),用于表示一个时间点

在这里插入图片描述
需要使用SYSTEMTIMEFileTimeToSystemTime函数,来进行转换日期

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查看相关信息

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL学习笔记二:PostgreSQL的系统架构

PostgreSQL 是一种功能强大的开源关系型数据库管理系统&#xff0c;其架构具有以下特点&#xff1a; 一、客户端/服务器架构 客户端 客户端可以是各种应用程序&#xff0c;如 Web 应用、桌面应用等&#xff0c;它们通过网络连接与 PostgreSQL 服务器进行通信。客户端使用标准的…

PHP:下拉列表,颜色展示

PHP展示下拉列表&#xff0c;选项设置为数据库存储颜色进制&#xff0c;colorname是颜色名称&#xff0c;color是颜色进制 一、表结构 produce_info_nav1_colorshow produce_info_nav1 二、核心代码 //查询对应默认颜色 $sql_selcolor "SELECT color FROM produce_i…

List子接口

1.特点&#xff1a;有序&#xff0c;有下标&#xff0c;元素可以重复 2.方法&#xff1a;包含Collection中的所有方法&#xff0c;还包括自己的独有的方法&#xff08;API中查找&#xff09; 还有ListIterator&#xff08;迭代器&#xff09;&#xff0c;功能更强大。 包含更多…

使用超低功耗TinyML模型检测聋哑人士的手势语言

论文标题&#xff1a;Detecting Gesture Language for Deaf and Mute People Using Ultra-Low-Power TinyML Model 作者信息&#xff1a; Basel A. Dabwan&#xff0c;来自也门Albaydha的Albaydha University的信息系统系。Mukti E. Jadhav&#xff0c;来自印度Buldhana区Chi…

HFSS 教程之材料添加

在用HFSS做仿真时&#xff0c;会用到多种材料&#xff0c;其材料库中的材料是有限的&#xff0c;有时仿真对象零件所用的材料并不包含在其材料库中&#xff0c;这时就需要新加材料。HSS自带的材料库&#xff0c;我们称之为系统材料库&#xff0c;新加的材料不能存入系统材料库中…

Kubernetes:Seccomp、AppArmor、SELinux Pod 安全性标准和准入

在云原生环境中&#xff0c;为确保容器化应用的安全运行&#xff0c;Kubernetes 利用了 Linux 内核的三大安全机制&#xff1a;Seccomp、AppArmor 和 SELinux&#xff0c;并引入了 Pod 安全性标准与准入控制来增强 Pod 的安全性。 Seccomp、AppArmor、SELinux 简介 Seccomp、…

前端vue的样式

sass/scss 语法说明 less sass stylus 都是 css 预处理器&#xff0c;语法上稍有差异&#xff0c;作用一样 都是让 css&#xff0c;增强能力&#xff0c;具备变量&#xff0c;函数.. 的能力 sass的语法两种语法 .sass 和 .scss .sass 和 .stylus 语法很像 (了解)要求省略 {} …

php的echo和print输出语句⑥

在 PHP 中有两个基本的输出方式&#xff1a; echo 和 print。 echo 和 print 区别: echo : 可以输出一个或多个字符串 print : 只允许输出一个字符串。 提示&#xff1a;echo 输出的速度比 print 快&#xff0c; echo 没有返回值&#xff0c;print有返回值1。 <?php …

java包和内部类1-cnblog

java包和内部类1 1 类名冲突 没有包的存在&#xff0c;管理类是一个很麻烦的问题&#xff0c;这个时候需要类包处理 2 完整类路径 在平时经常使用的String&#xff0c;并不是它的完整名称 一个完整的类名需要包名和类名的组合&#xff0c;每个类都属于一个类包&#xff0c…

02复写零

复写零 我们先进行异地复写&#xff1a;代码如下 public class Test {public static void main(String[] args) {int []array {1,0,2,3,0,4};duplicateZeros(array);}public static void duplicateZeros(int[] arr) {int [] elemnew int[arr.length];for(int cur0,dest0;des…

【动手学电机驱动】 TI InstaSPIN-FOC(1)电机驱动和控制测试平台

【动手学电机驱动】 TI InstaSPIN-FOC&#xff08;1&#xff09;电机驱动和控制测试平台 1. 本系列的资源需求1.1 电机驱动控制概况1.2 InstaSPIN-FOC 电机控制方案1.3 资源需求 2. 软件安装2.1 安装 CCS2.2 安装 MotorWare2.3 安装 ControlSUITE&#xff08;可选&#xff09; …

neo4j部署保姆级教程

由于公司是基于大数据架构的&#xff0c;让部署neo4j数据库&#xff0c;之前没有接触过&#xff0c;然后紧急学了一下&#xff0c;并且从网上找了一些教程&#xff0c;决定还是记录下来&#xff0c;后续有时间了会在出一篇使用教程 环境准备&#xff08;root用户&#xff09; …

Spring Boot课程问答:技术难题专家解答

摘要 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#xff0c;针对这个问题开发一个专门适应师生交流形式的网站。本文介绍了课程答疑系统的开发全过程。通过分析企业对于课程答疑系统的需求&#xff0c;创建了一个计算机管理课程答疑系统的方案。文章介…

Windows docker 部署MiGPT+ 本地Ollama

1. 下载 MiGPT https://github.com/idootop/mi-gpt https://github.com/idootop/mi-gpt/releases/tag/v4.2.0 2. 运行 Ollama qwen模型 3.配置Mi GPT .env .migpt.js 运行docker 运行 需要上网 docker run -d --env-file D:\LLM\mi-gpt-4.2.0\.env -v D:\LLM\mi-gpt-4.2.0…

Oracle登录报错-ORA-01017: invalid username/password;logon denied

接上文&#xff1a;Oracle创建用户报错-ORA-65096: invalid common user or role name 我以为 按照上文在PDB里创建了用户&#xff0c;我以为就可以用PLSQL远程连接了&#xff0c;远程服务器上也安装了对应版本的Oracle客户端&#xff0c;但是我想多了&#xff0c;客户只是新建…

保姆级教程 | VMD输出局部结构及利用TkConsole实现旋转

背景 由于课题需要,现需要展示lammps模拟轨迹中的局部结构(主要是想可视化这里的结果:保姆级教程 | 输出分子动力学轨迹文件输出特定原子范围内的化学环境),因为ovito效果有点笨笨的,所以我这里选用VMD软件为例进行操作,效果图(超级好看夸夸): (说明:主要的分子构…

2024最新分别用sklearn和NumPy设计k-近邻法对鸢尾花数据集进行分类(包含详细注解与可视化结果)

本文章代码实现以下功能&#xff1a; 利用sklearn设计实现k-近邻法。 利用NumPy设计实现k-近邻法。 将设计的k-近邻法对鸢尾花数据集进行分类&#xff0c;通过准确率来验证所设计算法的正确性&#xff0c;并将分类结果可视化。 评估k取不同值时算法的精度&#xff0c;并通过…

HarmonyOS第一课 04 应用程序框架基础-习题分析

判断题 1.在基于Stage模型开发的应用项目中都存在一个app.json5配置文件、以及一个或多个module.json5配置文件。T 正确(True) 错误(False) 这个答案是T - AppScope > app.json5&#xff1a;app.json5配置文件&#xff0c;用于声明应用的全局配置信息&#xff0c;比如应用…

【红外传感器】STM32C8T6标准库使用红外对管

好好学习&#xff0c;天天向上 前言一、了解红外二、标准库的代码1.infrared.c2.infrared.h3.main.c4 现象 总结 前言 红外线&#xff1a;频率介于微波与可见光之间的电磁波。 参考如下 【STM32】标准库与HAL库对照学习教程外设篇–红外避障传感器 光电红外传感器详解&#…

SpringCloud Alibaba-01 入门简介

1.Spring Cloud Alibaba 是由阿里巴巴结合自身丰富的微服务实践而推出的微服务开发的一站式解决方案。它是 Spring Cloud 生态中的第二代实现&#xff0c;提供了包括服务注册与发现、分布式配置管理、服务限流降级、消息驱动能力、阿里云对象存储、分布式任务调度等在内的多种功…