[WinAPI] API 8 [获取磁盘空间信息]

简介:


 

 

获取磁盘分区的总容量和空闲空间的容量可以使用GetDiskFreeSpace函数或GetDiskFree SpaceEx函数。GetDiskFreeSpace使用DWORD类型作为输出参数,由于DWOR长度为32位,最大只能表示4GB,而一般的磁盘分区大小都大于4GB,所以,GetDiskFreeSpace并不直接返回磁盘的总容量和空闲空间的容量,而是使用总簇数、空闲的簇数、每簇的扇区数、每扇区的字节数来表示。用户在编程时,可以使用它们的乘积来获得最终结果。而GetDiskFreeSpaceEx使用ULARGE_INTEGER (DWORD64)类型的数据来存储磁盘空间总空间和剩余空间,所以可以直接获得结果。DWORD64可以表示约16777216TB的数据量(DWORD64最大可表示2^64Byte,lTB=2^40Byte)

 

(1)GetDiskFreeSpace

获取驱动器根路径作为输入,获取磁盘空间信息,包括每簇的扇区数,每扇区的字节数,簇数量,空闲的簇数量

参数:

lpRootPathName:输入参数

lpSectorsPerCluster:输出参数,指针,指向存储每簇扇区数的DWORD类型变量.

lpBytesPerSector:输出参数,指针,指向存储每扇区字节数的DWORD类型变量.

lpNumberOfFreeClusters:输出参数,指针,指向存储空闲簇的DWORD类型变量.

lpTotalNumberOfClusters:输出参数,指针,指向存储总簇数的DWORD类型变量.

返回值:

返回BOOL值,表示信息获取是否成功. 总簇数乘以每簇扇区数乘以每扇区字节数就是磁盘分区的总容量,空闲簇数乘以每簇扇区数,乘以每扇区字节数就是磁盘 分区的空闲空间容量.

 

GetDiskFreeSpaceEx

获取驱动器根路径作为输入,获取用户可用的空闲空间的字节数,磁盘总容量的字节数. 

参数:

lpDirectoryName:输入参数,指向所要获取磁盘空间信息的磁盘分区根路径字符串.

lpFreeBytesAvailable:输出参数,指针,指向用于存储可获得的总字节数量的变量.

lpTotalNumberOfBytes:输出参数,指针,指向存储磁盘空间总字节数据的变量.

lpTotalNumberOfFreeBytes:输出参数,指针,指向存储磁盘空闲空间总字节的变量.

返回值:

返回BOOL,表示信息获取是否成功 ULARGE_INTEGER类型数据可以直接强制转换为DWORD64类型变量.

 

关键数据结构:

GetDiskFreeSpaceEx函数使用了数据结构ULARGE_INTEGER,数据类型PULARGE_INTEGER是指向它的指针.

typedef union _ULARGE_INTEGER{

  struct{   

    DWORD LowPart;   

    DWORD HighPart;

  };

  struct{   

    DWORD LowPart;   

    DWORD HighPart;

  }U;

  ULONGLONG QuadPart;

}ULARGE_INTEGER,*PULARGE_INTEGER;

 

 

复制代码
 1 #include <windows.h>
 2 #include <stdio.h>
 3 
 4 /* ************************************
 5 * BOOL GetDiskSpaceInfo(LPCSTR pszDrive
 6 * 功能 根据输入的驱动器,获取磁盘总容量
 7 *    空闲空间、簇数量等磁盘信息
 8 * 参数 驱动器根路径,比如“D:\”。
 9 **************************************/
10 BOOL GetDiskSpaceInfo(LPCSTR pszDrive)
11 {
12     DWORD64 qwFreeBytesToCaller, qwTotalBytes, qwFreeBytes;
13     DWORD dwSectPerClust, dwBytesPerSect, dwFreeClusters, dwTotalClusters;
14     BOOL bResult;
15 
16     //使用GetDiskFreeSpaceEx获取磁盘信息并打印结果
17     bResult = GetDiskFreeSpaceExA (pszDrive,
18         (PULARGE_INTEGER)&qwFreeBytesToCaller,
19         (PULARGE_INTEGER)&qwTotalBytes,
20         (PULARGE_INTEGER)&qwFreeBytes);
21 
22     if(bResult) 
23     {
24         printf("使用GetDiskFreeSpaceEx获取磁盘空间信息\n");
25         printf("可获得的空闲空间(字节): \t%I64d\n", qwFreeBytesToCaller);
26         printf("空闲空间(字节): \t\t%I64d\n", qwFreeBytes);
27         printf("磁盘总容量(字节): \t\t%I64d\n", qwTotalBytes);
28     }
29 
30     //使用GetDiskFreeSpace获取磁盘信息并打印结果
31     bResult = GetDiskFreeSpaceA (pszDrive, 
32         &dwSectPerClust, 
33         &dwBytesPerSect,
34         &dwFreeClusters, 
35         &dwTotalClusters);
36 
37     if(bResult) 
38     {
39         printf("\n使用GetDiskFreeSpace获取磁盘空间信息\n");
40         printf("空闲的簇数量 : \t\t\t%d\n",dwFreeClusters);
41         printf("总簇数量 : \t\t\t%d\n",dwTotalClusters);
42         printf("每簇的扇区数量 : \t\t%d\n",dwSectPerClust);
43         printf("每扇区的容量(字节): \t\t%d\n",dwBytesPerSect);
44         printf("空闲空间(字节): \t\t%I64d\n", 
45             (DWORD64)dwFreeClusters*
46             (DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect);
47         printf("磁盘总容量(字节): \t\t%I64d",
48             (DWORD64)dwTotalClusters*
49             (DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect);
50     }
51     return bResult;
52 }
53 
54 /* ************************************
55 * int main( int argc, PCHAR argv[] )
56 * 功能 应用程序主函数,根据输入参数
57 *    调用GetDiskSpaceInfo函数获取
58 *    磁盘空间信息
59 * 参数 驱动器根路径,比如“D:\”。
60 **************************************/
61 int main(int argc, PCHAR argv[])
62 {
63     GetDiskSpaceInfo (argv[1]);
64 }
复制代码

 



本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/3585605.html,如需转载请自行联系原作者

相关文章
|
2月前
|
JSON 搜索推荐 API
抖音商品详情API接口:获取商品信息的指南
抖音商品详情API接口由抖音开放平台提供,允许第三方应用访问抖音小店的商品数据,包括基本信息、价格、库存及用户评价等。其优势在于数据实时性、自动化处理、市场分析及个性化推荐。通过注册账号、获取API密钥、阅读文档和构建请求,用户可高效获取商品信息,提升运营效率。未来,该接口将在电商领域发挥更大作用。
|
3月前
|
JSON API 开发工具
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
|
3月前
|
API Python
【Azure Developer】AAD API如何获取用户“Block sign in”信息(accountEnabled)
【Azure Developer】AAD API如何获取用户“Block sign in”信息(accountEnabled)
|
6天前
|
JSON 安全 API
抖音店铺商品信息的 API
抖音店铺商品信息的 API 主要用于获取商品的详细信息,包括基本信息、属性、库存、评价、推广信息等。开发者需注册账号、申请权限、阅读文档、发送请求并处理响应。此外,还提供商品搜索和管理接口,帮助商家优化商品展示和管理订单,提高运营效率。使用时需遵守平台规则,确保数据安全和合法性。
|
13天前
|
Prometheus 监控 Cloud Native
调用淘宝 API 时如何处理错误信息?
调用淘宝API时,需熟悉其错误码体系,处理客户端(如参数错误、权限不足)和服务器(如内部错误、网络问题)错误,编写错误处理逻辑,并进行充分测试与监控,确保API调用稳定可靠。
|
6天前
|
监控 供应链 搜索推荐
获取店铺商品信息的 API 接口有哪些?
本文介绍了五个常用的电商平台获取店铺商品信息的 API 接口:淘宝、京东、1688、拼多多和慢慢买。每个接口的功能、使用方式及优势各不相同,涵盖商品详情、价格、销量、库存等信息,适用于商品分析、竞品分析、价格监控等场景,帮助商家提升业务效率和市场竞争力。
|
2月前
|
XML JSON API
淘宝商品详情API接口:获取商品信息的指南
淘宝详情API接口是淘宝开放平台提供的一种API接口,它允许开发者通过编程方式获取淘宝商品的详细信息。这些信息包括商品的基本属性、价格、库存状态、销售策略、卖家信息等,对于电商分析、市场研究或者商品信息管理等场景非常有用。
60 1
|
3月前
|
测试技术 API
【API管理 APIM】如何查看APIM中的Request与Response详细信息,如Header,Body中的参数内容
【API管理 APIM】如何查看APIM中的Request与Response详细信息,如Header,Body中的参数内容
|
3月前
|
JSON API 数据安全/隐私保护
从零开始认识 API,让网页信息成为你的「知识库」
本文介绍了API(应用程序编程接口)的概念及其在网络通信中的重要作用,并通过生动的例子解释了API的工作原理。API作为连接不同软件组件的桥梁,使得开发者能够构建出功能丰富且灵活的应用程序。文章进一步探讨了如何捕获API,包括查看官方文档、使用浏览器的F12工具观察网络请求,以及借助抓包工具捕获移动应用的API调用。通过这些技术,用户可以获取所需的API信息并加以利用。作为实例,文章展示了如何通过抓取知乎、少数派等平台的热门文章API,整合信息到个人博客或笔记系统中,创建个性化的信息中心。这一过程不仅提高了信息获取的效率,也为个性化内容消费开辟了新的途径。
|
4月前
|
开发框架 NoSQL 前端开发
在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息