2

書き込む前に、特定のメモリ内バッファがディスク上(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呼び出しはありますか?全体のディスクサイズに応じて、いくつかのハード値を想定できますか?

4

4 に答える 4

3

MSDN は、関数が2GB を超えるボリューム サイズGetDiskFreeSpace()を報告できないことのみを述べています。クラスターごとのセクターとセクターごとのバイトを取得するのに問題なく動作します。非常によく似たコードに自分で使用しました;-)

ただし、ディスク容量も必要な場合は、 への追加の呼び出しが必要になりますGetDiskFreeSpaceEx()

于 2009-04-15T12:55:52.220 に答える
1

この情報は、DeviceIoControl 関数と
DISK_GEOMETRY_EX を使用して取得できるはずです。探している情報を含む構造を返すと思います

http://msdn.microsoft.com/en-us/library/aa363216(VS.85).aspx

http://msdn.microsoft.com/en-us/library/ms809010.aspx

于 2009-04-15T11:30:24.407 に答える
-3

アクションスクリプトで!

var size:Number = 19912;
var sizeOnDisk:Number = size;
var reminder:Number = size % (1024 * 4);
if(reminder>0){
    sizeOnDisk = size + ((1024 * 4)- reminder)
}
trace(size)
trace(sizeOnDisk)
于 2010-06-11T11:37:07.857 に答える