//磁盘分区的总容量(字节)=总簇数*每簇扇区数*每扇区字节数 //磁盘分区的空闲空间(字节)=空闲簇数*每簇扇区数*每扇区字节数 BOOL GetDiskFreeSpace( LPCTSTR lpRootPathName,//指向所要获取磁盘空间信息的磁盘分区根路径字符串 LPDWORD lpSectorsPerCluster,//指向存储每簇扇区数的DWORD类型变量 LPDWORD lpBytesPerSector,//指向存储每扇区字节数的DWORD类型变量 LPDWORD lpNumberOfFreeClusters,//指向存储空闲簇的DWORD类型变量 LPDWORD lpTotalNumberOfClusters//指向存储总簇数的DWORD类型变量 );
/* ************************************************************** * BOOL GetDiskFreeSpaceEx * 功能: * 获取用户可用的空闲空间字节数、空闲空间的字节数、磁盘总容量的字节数 * 参数: * LPCTSTR lpDirectoryName * 指向所要获取磁盘空闲信息的磁盘分区根路径字符串 * PULARGE_INTEGER lpFreeBytesAvailable * 指向用于存储可获得的总字节数量的变量,用户实际可用的空闲空间 * PULARGE_INTEGER lpTotalNumberOfBytes * 指向存储磁盘空间总字节数据的变量 * PULARGE_INTEGER lpTotalNUmberOfFreeBytes * 指向存储磁盘空闲空间总字节的变量 * 返回值: * 返回BOOL值,表示信息获取是否成功 ***************************************************************/ BOOL GetDiskFreeSpaceEx( LPCTSTR lpDirectoryName,//指向所要获取磁盘空闲信息的磁盘分区根路径字符串 PULARGE_INTEGER lpFreeBytesAvailable,//指向用于存储可获得的总字节数量的变量 PULARGE_INTEGER lpTotalNumberOfBytes,//指向存储磁盘空间总字节数据的变量 PULARGE_INTEGER lpTotalNUmberOfFreeBytes//指向存储磁盘空闲空间总字节的变量 );
代码演示
#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; printf("%s ", pszDrive); //使用GetDiskFreeSpaceEx获取磁盘信息并打印结果 bResult = GetDiskFreeSpaceExA( pszDrive, (PULARGE_INTEGER)&qwFreeBytesToCaller, (PULARGE_INTEGER)&qwTotalBytes, (PULARGE_INTEGER)&qwFreeBytes ); if(bResult) { printf("使用GetDiskFreeSpaceEx获取磁盘空间信息 "); printf("可获得的空闲空间(字节): %I64d ", qwFreeBytesToCaller); printf("空闲空间(字节): %I64d ", qwFreeBytes); printf("磁盘总容量(字节): %I64d ", qwTotalBytes); } //使用GetDiskFreeSpace获取磁盘信息并打印结果 bResult = GetDiskFreeSpaceA( pszDrive, &dwSectPerClust, &dwBytesPerSect, &dwFreeClusters, &dwTotalClusters ); if(bResult) { printf(" 使用GetDiskFreeSpace获取磁盘空间信息 "); printf("空闲的簇数量: %d ", dwFreeClusters); printf("总簇数量: %d ", dwTotalClusters); printf("每簇的扇区数量: %d ", dwSectPerClust); printf("每扇区的容量(字节): %d ", dwBytesPerSect); printf("空闲空间(字节): %I64d ",(DWORD64)dwFreeClusters*(DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect); printf("磁盘总容量(字节): %I64d ",(DWORD64)dwTotalClusters*(DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect); } return bResult; } int main(void) { GetDiskSpaceInfo("c:"); return 0; }