我需要知道给定的内存缓冲区在写入磁盘(usb stick)文件之前会有多大。我知道,除非尺寸落在块尺寸边界上,否则它可能会四舍五入。 1个字节的文件在磁盘上占用4096个字节。目前,我正在做这个使用GetDiskFreeSpace()摸出磁盘块大小,然后用此来计算在磁盘上的大小是这样的:预先编程确定文件“磁盘上的大小”
GetDiskFreeSpace(szDrive, &dwSectorsPerCluster,
&dwBytesPerSector, NULL, NULL);
dwBlockSize = dwSectorsPerCuster * dwBytesPerSector;
if (dwInMemorySize % dwBlockSize != 0)
{
dwSizeOnDisk = ((dwInMemorySize/dwBlockSize) * dwBlockSize) + dwBlockSize;
}
else
{
dwSizeOnDisk = dwInMemorySize;
}
这似乎是做工精细,但根据MSDN,GetDiskFreeSpace()仅适用于最大2GB的磁盘。 GetDiskFreeSpaceEx()不会返回相同的信息,所以我的问题是,我该如何计算驱动器> 2GB的此信息?有没有我错过的API调用?我可以根据整个磁盘大小假设一些硬性值吗?
提示:这是一个“接近下一个倍数”。你可以使用blocks =(MemorySize +(BlockSize-1))%BlockSize;有点短。 – MSalters 2009-04-15 13:52:01
这当然假设有问题的文件系统上需要多少空间容纳N个字节。当然,它可能需要N个字节的数据,但一个文件也有元数据,需要考虑。元数据的大小可能与文件系统有很大差异。 – unwind 2009-04-15 13:53:57