我需要知道給定的內存緩衝區在寫入磁盤(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