在写入之前,我需要知道给定的内存缓冲区作为磁盘(USB 棒)文件有多大。我知道除非大小落在块大小边界上,否则它可能会被四舍五入,例如,一个 1 字节的文件在磁盘上占用 4096 字节。我目前正在使用GetDiskFreeSpace()来计算磁盘块大小,然后使用它来计算磁盘大小,如下所示:
GetDiskFreeSpace(szDrive, &dwSectorsPerCluster,
&dwBytesPerSector, NULL, NULL);
dwBlockSize = dwSectorsPerCuster * dwBytesPerSector;
if (dwInMemorySize % dwBlockSize != 0)
{
dwSizeOnDisk = ((dwInMemorySize / dwBlockSize) * dwBlockSize) + dwBlockSize;
}
else
{
dwSizeOnDisk = dwInMemorySize;
}
这似乎工作正常,但 GetDiskFreeSpace()根据 MSDN 仅适用于高达 2GB 的磁盘。GetDiskFreeSpaceEx()不会返回相同的信息,所以我的问题是,我还能如何计算大于 2GB 的驱动器的此信息?有没有我错过的 API 调用?我可以根据整体磁盘大小假设一些硬值吗?