WinAPI的。如何获得硬盘空闲/忙碌空间

时间:2016-09-18 18:39:21

标签: c winapi

我正在编写一个程序来获取一些硬盘信息。目前,我可以使用 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。

1 个答案:

答案 0 :(得分:1)

GetDiskFreeSpace确实&#34;工作&#34;,但您需要使用正确的第一个参数。

  

lpRootPathName [in]

     

要返回信息的磁盘的根目录。

"\\\\.\\PhysicalDrive0"不正确,因为这是针对整个磁盘驱动器的,并且它不是由文件系统挂载的。但是,此请求由文件系统处理。您需要使用"\\\\?\\c:\\""\\\\?\\Harddisk0Partition<N>\\""\\\\?\\HarddiskVolume<N>\\""\\\\?\\Volume{guid}\\"之类的名称 - 最后的斜线非常重要 - 如果它不起作用。但是在"\\\\?\\PhysicalDrive0\\"的情况下 - 斜线无济于事。它不起作用,因为此设备上没有安装FS。