문제

글을 쓰기 전에 주어진 메모리 버퍼가 온 메모리 버퍼가 온 디스크 (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;
}

잘 작동하는 것 같습니다. 하지만 getDiskFreespace () MSDN에 따르면 최대 2GB의 디스크에서만 작동합니다. getDiskFreespaceEx () 동일한 정보를 반환하지 않으므로 내 질문은 드라이브> 2GB에 대한이 정보를 어떻게 계산할 수 있습니까? 내가 놓친 API 호출이 있습니까? 전체 디스크 크기에 따라 일부 하드 값을 가정 할 수 있습니까?

도움이 되었습니까?

해결책

MSDN은 GetDiskFreeSpace() 기능은보고 할 수 없습니다 볼륨 크기 2GB보다 큽니다. 클러스터 당 부문과 부문 당 바이트를 검색하는 데 잘 작동합니다. 저는 매우 유사한 코드에 직접 사용했습니다. ;-)

그러나 디스크 용량도 원한다면 추가 호출이 필요합니다. GetDiskFreeSpaceEx().

다른 팁

디스크 파일의 크기는 퍼지 개념입니다. NTFS에서 파일은 일련의 데이터 요소로 구성됩니다. 당신은 "이름이없는 데이터 스트림"에 대한 원시적 인 생각입니다. 이는 작은 경우 디렉토리 항목의 다른 속성으로 포장 할 수있는 파일의 속성입니다. 보기에, 디렉토리 항목 자체에 최대 700-800 바이트의 데이터 스트림을 저장할 수 있습니다. 따라서 가상의 1 바이트 파일은 0 바이트 또는 700 바이트 파일만큼 큰 것입니다.

또 다른 영향은 파일 압축입니다. 이렇게하면 온 메모리 크기보다 온 디스크 크기가 잠재적으로 작습니다.

Deviceiocontrol 기능을 사용 하여이 정보를 얻을 수 있어야합니다.
디스크 _geometry_ex. 그것은 당신이 찾고있는 정보를 포함하는 구조를 반환합니다.

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

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

ActionScript에서!

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top