获取磁盘分区的总容量和空闲空间的容量可以使用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. [纯小白学习OpenCV系列]官方例程01:Load and Display an Image

    Version: OpenCV 2.4.9 IDE    : VS2010 OS     : Windows --------------------------------------------- ...

  2. 深入理解js——执行上下文

    什么是"执行上下文"?暂且不下定义,先看一段代码: 第一句报错,a未定义,很正常.第二句.第三句输出都是undefined,说明浏览器在执行console.log(a)时,已经知道 ...

  3. 关于isScroll如何使用

    isScroll是用原生javascript写的实现局部滚动的一个库,它不依赖任何第三方库.设计的初衷是为了解决移动webkit系浏览器的区域滚动问题,兼容safari.chrome.firefox5 ...

  4. Java NIO教程 前言

    阅读本文前,建议你先了解 旧I/O NIO 是 New I/O 的缩写,要了解它真正的内涵,需要掌握的知识还是比较多的.我努力在这几篇笔记里,勾勒出整个io的面貌.为大家的深入学习铺路. I/O简史 ...

  5. Origin9.1如何使用原始数据(Raw Data)绘制风向玫瑰图

    核心提示:今天为大家简单介绍下如何使用原始数据绘制风向玫瑰图.本例以Origin 9.1进行演示.1.本例所用数据截图如下,列A为风向,列B为风速.2.选中两列数据,进入Plot下的Specializ ...

  6. sqlserver巧用row_number和partition by分组取top数据

    SELECT * FROM( SELECT orderid,createtime, ROW_NUMBER() over(PARTITION by orderid order by createtime ...

  7. Linux编程下EAGAIN和EINTR宏的含义及处理

    Linux中的EAGAIN含义   在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). linux下使用write\send ...

  8. linux 无法解压过大文件解决

    [root@vmbbak yum]# unzip RHEL_5.7\ x86_64\ DVD-1.zip error: Zip file too big (greater than 429495910 ...

  9. docker--wekan安装

    最近因为搭建开源看板网站的需要,玩了下docker 一开始在redhat上安装docker wget http://mirrors.163.com/.help/CentOS7-Base-163.rep ...

  10. Practice:输入年月日,判断该时间为一年的第几天

    #-*- coding:utf- -*- ''' Created on -- # 输入年月日,判断为一年的第几天 @author: AdministrInputator ''' def leapYea ...