[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,如需转载请自行联系原作者

相关文章
|
21天前
|
缓存 API
全球最新地震信息免费API接口教程
该接口提供全球最新地震信息,数据源自中国地震台网,每5分钟更新一次。支持POST/GET请求,需提供用户ID和KEY。返回数据包括地震等级、时间、经纬度、深度及位置等详细信息。示例请求和响应详见文档。
|
3月前
|
JSON 搜索推荐 API
抖音商品详情API接口:获取商品信息的指南
抖音商品详情API接口由抖音开放平台提供,允许第三方应用访问抖音小店的商品数据,包括基本信息、价格、库存及用户评价等。其优势在于数据实时性、自动化处理、市场分析及个性化推荐。通过注册账号、获取API密钥、阅读文档和构建请求,用户可高效获取商品信息,提升运营效率。未来,该接口将在电商领域发挥更大作用。
|
4月前
|
JSON API 开发工具
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
|
11天前
|
缓存 算法 API
查询域名WHOIS信息免费API接口教程
该API用于查询顶级域名的WHOIS信息,不支持国别域名和中文域名。通过POST或GET请求,需提供用户ID、KEY及待查询域名。返回信息包括域名状态、注册商、时间等详细数据。示例与文档见官网。
|
11天前
|
API 区块链
获取指定网页基础信息【TDK】免费API接口教程
该接口用于从标准网页中提取标题、关键词、描述和图标等信息。支持POST/GET请求,需提供用户ID、KEY及目标网址等参数,可选指定访问节点。返回状态码、信息提示及提取的内容。示例与详细文档见官网。
|
4月前
|
API Python
【Azure Developer】AAD API如何获取用户“Block sign in”信息(accountEnabled)
【Azure Developer】AAD API如何获取用户“Block sign in”信息(accountEnabled)
|
20天前
|
API
万年历[取当日信息]免费API接口教程
此API提供万年历当天的详细信息,包括农历、星期、宜忌、生肖、星座、节日、五行、星宿等。支持POST和GET请求,需提供用户ID和KEY。返回数据包含阳历、农历、干支、节日列表等多项内容。示例URL:https://cn.apihz.cn/api/time/getday.php?id=88888888&key=88888888。
85 10
|
29天前
|
JSON 数据挖掘 API
电商信息指南:API接口淘宝关键词、店铺所有商品获取
要获取淘宝关键词商品数据和店铺所有商品的API接口,需先注册淘宝开放平台账号并创建应用,获取API密钥。接着,使用密钥获取访问令牌,详细阅读API文档,构造并发送API请求,解析响应数据。特别地,使用`item_search_shop`接口可获取店铺内所有商品信息。
|
2月前
|
JSON 安全 API
抖音店铺商品信息的 API
抖音店铺商品信息的 API 主要用于获取商品的详细信息,包括基本信息、属性、库存、评价、推广信息等。开发者需注册账号、申请权限、阅读文档、发送请求并处理响应。此外,还提供商品搜索和管理接口,帮助商家优化商品展示和管理订单,提高运营效率。使用时需遵守平台规则,确保数据安全和合法性。
|
23天前
|
Web App开发 API Windows
取接口访问者信息[IP,浏览器,操作系统]免费API接口教程
此API用于获取访问者的IP地址、浏览器和操作系统信息,支持70多种浏览器和操作系统。通过POST或GET请求至`https://cn.apihz.cn/api/ip/getapi.php`,需提供用户ID和KEY。返回结果包括状态码、消息、IP、浏览器和操作系统信息。示例:{&quot;code&quot;:200,&quot;ip&quot;:&quot;175.154.88.178&quot;,&quot;browser&quot;:&quot;Chrome&quot;,&quot;os&quot;:&quot;Windows 10&quot;}。详情见官网文档。