我正在编写一个程序来获取一些硬盘信息。目前,我可以使用 DeviceIoControl 功能和相应的 IOCTL_DISK_GET_DRIVE_GEOMETRY 标记来获取硬盘的完整大小。
我尝试使用 GetDiskFreeSpace 功能并发送" \\。\ PhysicalDrive0" 参数,但它没有'工作。
BOOL bResult = GetDiskFreeSpace("\\\\.\\PhysicalDrive0", &dwSectorsPerCluster,
&dwBytesPerSector, &dwNumberOfFreeClusters,
&dwTotalNumberOfClusters);
if (bResult == FALSE) {
std::cout << "Can't retrieve disk free space info." << std::endl;
return bResult;
}
输出:无法检索磁盘空闲信息。 例如,&#34; \\。\ PhysicalDrive0&#34;替换为&#34; C:&#34;工作得很好。
问题是如何使用WinAPI函数获取硬盘上的空闲或已用空间?
P.S。不使用WMI。
答案 0 :(得分:1)
GetDiskFreeSpace
确实&#34;工作&#34;,但您需要使用正确的第一个参数。
lpRootPathName [in]
要返回信息的磁盘的根目录。
"\\\\.\\PhysicalDrive0"
不正确,因为这是针对整个磁盘驱动器的,并且它不是由文件系统挂载的。但是,此请求由文件系统处理。您需要使用"\\\\?\\c:\\"
或"\\\\?\\Harddisk0Partition<N>\\"
或"\\\\?\\HarddiskVolume<N>\\"
或"\\\\?\\Volume{guid}\\"
之类的名称 - 最后的斜线非常重要 - 如果它不起作用。但是在"\\\\?\\PhysicalDrive0\\"
的情况下 - 斜线无济于事。它不起作用,因为此设备上没有安装FS。