書き込む前に、特定のメモリ内バッファがディスク上(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;
}
これは正常に機能しているようですが、MSDNによると、GetDiskFreeSpace ()は最大2GBのディスクでのみ機能します。GetDiskFreeSpaceEx()は同じ情報を返さないので、私の質問は、2GBを超えるドライブについてこの情報を他にどのように計算できるかということです。見逃したAPI呼び出しはありますか?全体のディスクサイズに応じて、いくつかのハード値を想定できますか?