1、使用GetDiskFreeSpace函数获取某个分区的容量信息时,总是获取到和实际结果不一致的信息。
2、对照了以前正确的程序,才发现,要将GetDiskFreeSpace函数的那几个参数强制转换为DWORD64类型的,才可以相乘得到正确的结果。
3、代码如下:
//获取每个volume的剩余空间
BOOL GetVolumeSize( IN char cVolume )
{
HANDLE hFile = NULL;
char szVolumeFile[10];
BOOL bReturn = FALSE;
DWORD dwSectPerClust,dwBytePerSect,dwNumberOfFreeClusters;
sprintf( szVolumeFile, "%c:\\", cVolume );
if( !GetDiskFreeSpace(szVolumeFile,
&dwSectPerClust,
&dwBytePerSect,
&dwNumberOfFreeClusters,
NULL )
)
{
printf("Function GetVolumeSize GetDiskFreeSpace failed,GetLastError:%d",GetLastError());
bReturn = FALSE;
goto exit;
}
printf("free size:%.02f", (DWORD64)dwSectPerClust * (DWORD64)dwBytePerSect * (DWORD64)dwNumberOfFreeClusters/ 1024.0/ 1024.0/ 1024.0 );
bReturn = TRUE;
exit:
return bReturn;
}