- // 磁盘分区的总容量 (字节)= 总簇数 * 每簇扇区数 * 每扇区字节数
- // 磁盘分区的空闲空间 (字节)= 空闲簇数 * 每簇扇区数 * 每扇区字节数
- 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\n", pszDrive);
- // 使用 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%d\n", dwFreeClusters);
- printf("总簇数量:\t\t%d\n", dwTotalClusters);
- printf("每簇的扇区数量:\t%d\n", dwSectPerClust);
- printf("每扇区的容量 (字节):\t%d\n", dwBytesPerSect);
- printf("空闲空间 (字节):\t%I64d\n",(DWORD64)dwFreeClusters*(DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect);
- printf("磁盘总容量 (字节):\t%I64d\n",(DWORD64)dwTotalClusters*(DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect);
- }
- return bResult;
- }
- int main(void)
- {
- GetDiskSpaceInfo("c:");
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2898851.html