GetDiskFreeSpace() 原型如下:
[C++] 纯文本查看 复制代码 BOOL WINAPI GetDiskFreeSpace(
__in LPCTSTR lpRootPathName,
__out LPDWORD lpSectorsPerCluster,
__out LPDWORD lpBytesPerSector,
__out LPDWORD lpNumberOfFreeClusters,
__out LPDWORD lpTotalNumberOfClusters
);
该函数用来获取磁盘分区容量信息。它用磁盘分区的根路径作为输入,而后获得磁盘簇的总数量,空闲蔟数量,每蔟的扇区数,每扇区的字节数等磁盘容量信息,这些信息都存储在函数的几个参数中。函数参数说明如下:
第 1 个参数 lpRootPathName 表示磁盘分区的根路径。
第 2 个参数 lpSectorsPerCluster 表示每蔟的扇区数。
第 3 个参数 lpBytesPerSector 表示每扇区的字节数。
第 4 个参数 lpNumberOfFreeClusters 表示空闲的蔟数量。
第 5 个参数 lpTotalNumberOfClusters 表示该磁盘分区的总蔟数。
测试代码:
[C++] 纯文本查看 复制代码 #include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "chs");
BOOL bResult;
DWORD dwSectorsPerCluster, dwBytePerSector, dwNumberOfFreeClusters, dwTotalNumberOfClusters;
bResult = GetDiskFreeSpace (argv[1], &dwSectorsPerCluster, &dwBytePerSector, &dwNumberOfFreeClusters, &dwTotalNumberOfClusters);
if (bResult) {
_tprintf (TEXT("\n ==== %s 盘空间信息 ==== \n"), argv[1]);
_tprintf (TEXT("总的簇数量:\t\t%d\n"), dwTotalNumberOfClusters);
_tprintf (TEXT("空闲的簇数量:\t\t%d\n"), dwNumberOfFreeClusters);
_tprintf (TEXT("每簇扇区数:\t\t%d\n"), dwSectorsPerCluster);
_tprintf (TEXT("每扇区字节数:\t\t%d\n"), dwBytePerSector);
_tprintf (TEXT("磁盘分区总容量(GB):\t\t%.1f GB\n"), (double)((DWORD64)dwTotalNumberOfClusters * (DWORD64)dwSectorsPerCluster * (DWORD64)dwBytePerSector)/(1024*1024*1024) );
_tprintf (TEXT("空闲空间容量(GB):\t\t%.1f GB\n"), (double)((DWORD64)dwNumberOfFreeClusters * (DWORD64)dwSectorsPerCluster * (DWORD64)dwBytePerSector)/(1024*1024*1024) );
}
return 0;
}
运行输出:D:\WinAPI\DiskSpace\Debug>DiskSpace.exe E:\
==== E:\ 磁盘空间信息 ====
总的簇数量: 89345023
空闲的簇数量: 22617770
每簇扇区数: 8
每簇扇字节数: 512
磁盘分区总容量(GB): 340.8 GB
空闲空间容量(GB): 86.3 GB
D:\WinAPI\DiskSpace\Debug>DiskSpace.exe D:\
==== D:\ 盘空间信息 ====
总的簇数量: 122724095
空闲的簇数量: 92773530
每簇扇区数: 8
每簇扇字节数: 512
磁盘分区总容量(GB): 468.2 GB
空闲空间容量(GB): 353.9 GB
蔟简单的说就是一组扇区,如下图所示:
在新的程序中,可以 GetDiskFreeSpaceEx() 函数来取代 GetDiskFreeSpace() ,它可以表示约 16777216TB 的容量,是后者的扩展版本。 |