2009-12-17 2 views
1

원시 sd 카드를 읽고 쓰려면 C# 및 pinvoke를 사용하고 있습니다. diskGeo.DiskSize이 1011709440. 이유는, (1) 지브의 SD 카드와deviceiocontrol 및 디스크 크기 질문

[StructLayout(LayoutKind.Sequential)] 
public struct DISK_GEOMETRY 
{ 
public long Cylinders; 
public int MediaType; 
public int TracksPerCylinder; 
public int SectorsPerTrack; 
public int BytesPerSector; 
public long DiskSize 
{ 
get 
{ 
return Cylinders * (long)TracksPerCylinder * (long)SectorsPerTrack * (long)BytesPerSector; 
} 
} 
} 

... 

uint dummy; 
DISK_GEOMETRY diskGeo = new DISK_GEOMETRY(); 
DeviceIoControl(safeHandle, EIOControlCode.DiskGetDriveGeometry, IntPtr.Zero, 0, 
        ref diskGeo, (uint)Marshal.SizeOf(typeof(DISK_GEOMETRY)), out dummy, IntPtr.Zero);     
this.sectorSize = diskGeo.BytesPerSector; 
this.bufferSize = this.sectorSize * 16384; 
this.diskSize = diskGeo.DiskSize; 

: 나는 DeviceIoControl을 가진 전체 용량을 얻을 필요가?

답변

1

약입니다. 사용 가능한 파티션의 실제 크기 인 965MB. 손실 된 59MB는 SD 저작권 보호 메커니즘과 같은 것을 포함하는 오버 헤드 파티션입니다. 또한 파일 형식 (FAT16, FAT32 등)에 따라 파일 할당 테이블 등에서 공간이 손실 될 수도 있습니다.

+0

고마워요, 제가 찾던 답변입니다. pinvoke를 사용하여 파티션의 정보를 지울 필요가 있습니다. 마지막 참고 사항 : hexplorer을 사용하면 1073741824 바이트, 전체 1 GiB를 읽고 쓸 수 있습니다. – ric

관련 문제