获取磁盘分区的总容量和空闲空间的容量可以使用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;

 #include <windows.h>
#include <stdio.h> /* ************************************
* BOOL GetDiskSpaceInfo(LPCSTR pszDrive
* 功能 根据输入的驱动器,获取磁盘总容量
* 空闲空间、簇数量等磁盘信息
* 参数 驱动器根路径,比如“D:\”。
**************************************/
BOOL GetDiskSpaceInfo(LPCSTR pszDrive)
{
DWORD64 qwFreeBytesToCaller, qwTotalBytes, qwFreeBytes;
DWORD dwSectPerClust, dwBytesPerSect, dwFreeClusters, dwTotalClusters;
BOOL bResult; //使用GetDiskFreeSpaceEx获取磁盘信息并打印结果
bResult = GetDiskFreeSpaceExA (pszDrive,
(PULARGE_INTEGER)&qwFreeBytesToCaller,
(PULARGE_INTEGER)&qwTotalBytes,
(PULARGE_INTEGER)&qwFreeBytes); if(bResult)
{
printf("使用GetDiskFreeSpaceEx获取磁盘空间信息\n");
printf("可获得的空闲空间(字节): \t%I64d\n", qwFreeBytesToCaller);
printf("空闲空间(字节): \t\t%I64d\n", qwFreeBytes);
printf("磁盘总容量(字节): \t\t%I64d\n", qwTotalBytes);
} //使用GetDiskFreeSpace获取磁盘信息并打印结果
bResult = GetDiskFreeSpaceA (pszDrive,
&dwSectPerClust,
&dwBytesPerSect,
&dwFreeClusters,
&dwTotalClusters); if(bResult)
{
printf("\n使用GetDiskFreeSpace获取磁盘空间信息\n");
printf("空闲的簇数量 : \t\t\t%d\n",dwFreeClusters);
printf("总簇数量 : \t\t\t%d\n",dwTotalClusters);
printf("每簇的扇区数量 : \t\t%d\n",dwSectPerClust);
printf("每扇区的容量(字节): \t\t%d\n",dwBytesPerSect);
printf("空闲空间(字节): \t\t%I64d\n",
(DWORD64)dwFreeClusters*
(DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect);
printf("磁盘总容量(字节): \t\t%I64d",
(DWORD64)dwTotalClusters*
(DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect);
}
return bResult;
} /* ************************************
* int main( int argc, PCHAR argv[] )
* 功能 应用程序主函数,根据输入参数
* 调用GetDiskSpaceInfo函数获取
* 磁盘空间信息
* 参数 驱动器根路径,比如“D:\”。
**************************************/
int main(int argc, PCHAR argv[])
{
GetDiskSpaceInfo (argv[]);
}

[WinAPI] API 8 [获取磁盘空间信息]的更多相关文章

  1. [WinAPI] API 14 [获取、设置文件属性和时间]

    >_< 为了获取文件属性,用户可以使用GetFileAttributes与GetFileAttributesEx函数. GetFileAttributesEx函数除了返回文件属性外,还返回 ...

  2. [WinAPI] API 12 [获取程序所在的目录、程序模块路径,获取和设置当前目录]

    Windows系统提供一组API实现对程序运行时相关目录的获取和设置.用户可以使用GetCurrentDirectory和SetCurrentDirectory获取程序的当前目录,获取模块的路径使用G ...

  3. [WinAPI] API 3 [获取系统目录,并保存在文件里]

    /* 获取系统目录,并保存在文件里 [peoject->set->link->project chose->subsystem:console] */ #include< ...

  4. windows程序设计 获取磁盘容量

    //磁盘分区的总容量(字节)=总簇数*每簇扇区数*每扇区字节数 //磁盘分区的空闲空间(字节)=空闲簇数*每簇扇区数*每扇区字节数 BOOL GetDiskFreeSpace( LPCTSTR lpR ...

  5. Windows c(++)获取磁盘剩余容量

    头文件 #include <windows.h> #include <wtypes.h> 函数 GetDiskFreeSpaceExA 获取剩余可用空间 /// 得到盘符, 例 ...

  6. windows下C语言编程获取磁盘(分区)使用情况

    windows下编程获取磁盘(分区)使用情况 windows下编程获取磁盘(分区)使用情况 GetLogicalDriveStrings函数 使用示例 获取需要的缓冲区长度示例 获取所有驱动器号示例 ...

  7. C# 获取磁盘剩余空间

    drive.TotalFreeSpace单位为bit,根据需要除以1024 drive同时可以可以获取磁盘分区容量等 //单位MB public static long GetHardDiskSpac ...

  8. Powershell获取磁盘信息

    使用Powershell完成系统管理实在是太方便了,磁盘信息获取只需几行代码即可. 1: $DiskCount = ((Get-WmiObject -Class Win32_DiskDrive).Ca ...

  9. httpclient 认证方式访问http api/resutful api并获取json结果

    最近,因公司线上环境rabbitmq经常发生堆积严重的现象,于是跟运维组讨论,帮助开发个集中监控所有rabbitmq服务器运行情况的应用,需要通过java访问rabbitmq暴露的http api并接 ...

随机推荐

  1. 《算法设计手册》面试题解答 第五章:图的遍历 附:DFS应用之找挂接点

    第五章面试题解答 5-31. DFS和BFS使用了哪些数据结构? 解析: 其实刚读完这一章,我一开始想到的是用邻接表来表示图,但其实用邻接矩阵也能实现啊?后来才发现应该回答,BFS用队列实现:DFS可 ...

  2. for 循环

    #include <iostream> int main(){ ; ; val <= ; ++val) { sum += val; } std::cout << &quo ...

  3. 几种不同的获取url地址的方法

    通过如下的几种方法,您就可以获取访问者访问您的网站的来路,请根据需要选择适合您的方法. 一.C#代码一 string url = Request["referer"]; Respo ...

  4. C++ 用libcurl库进行http通讯网络编程(转)

    转载:http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三. ...

  5. Java中abstract的用法

    1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法. 2,abs ...

  6. 云计算和大数据时代网络技术揭秘(十二)自定义网络SDN

    软件定义网络——SDN SDN是网络技术热点,即软件定义网络,OpenFlow是实现SDN思想的一个框架标准, open是指公开.开放,具体为控制平面的规则由各个通信厂家自定义变为公开的技术标准, f ...

  7. 苹果会在明后年推出13寸屏iPad吗?

    摘要:苹果推大屏iPad的传闻由来已久,近日有国外媒体再次撰文称,这种大屏iPad不仅是苹果Mac继任者,同时也是Surface的有利竞争者……这真的可能吗?这只是分析师的捕风捉影,还是真有这种可能? ...

  8. freeCodeCamp:Repeat a string repeat a string

    重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串. /*思路 fo循环将字符串重复num次并组成数组 将数组组成新的字符串并返回 */ function repeat(str, ...

  9. vue.js

    一:vue的简单介绍: (1)Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件: (2)Vue.js 自身不是一个全能框架——它只聚焦于视图层.因此它非常容易学习,非 ...

  10. P1093 奖学金

    奖学金 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同,再按语文 ...