Мне нужно знать, насколько большим будет данный буфер в памяти в виде файла на диске (флешка), прежде чем я запишу его. Я знаю, что если размер не попадает на границу размера блока, он может округляться, например, 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 () работает только на дисках объемом до 2 ГБ в соответствии с MSDN. GetDiskFreeSpaceEx () не возвращает ту же информацию, поэтому мой вопрос: как еще можно рассчитать эту информацию для накопителей> 2 ГБ? Я пропустил вызов API? Могу ли я принять некоторые жесткие значения в зависимости от общего размера диска?