在写它之前,我需要知道给定的内存缓冲区作为磁盘(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()仅适用于最大2GB的磁盘(根据MSDN)。 GetDiskFreeSpaceEx()不会返回相同的信息,所以我的问题是,对于大于2GB的驱动器,我还能如何计算该信息?我错过了API调用吗?我可以根据总磁盘大小来假设一些硬值吗?
最佳答案
MSDN仅声明GetDiskFreeSpace()
函数无法报告大于2GB的卷大小。对于检索每个群集的扇区和每个扇区的字节,它工作得很好,我自己将其用于非常相似的代码;-)
但是,如果您也想要磁盘容量,则需要额外调用GetDiskFreeSpaceEx()
。
关于c - 预先以编程方式确定文件 “size on disk”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/751157/