deviceiocontrol и вопрос о размере диска - PullRequest
1 голос
/ 17 декабря 2009

Я использую C # и pinvoke для чтения / записи сырой 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;

При SD-карте 1 ГБ диск Geo.DiskSize равен 1011709440. Почему?

1 Ответ

1 голос
/ 17 декабря 2009

Это ок. 965MB, который является фактическим размером используемого раздела. Потерянные 59 МБ - это служебный раздел, содержащий такие вещи, как механизм защиты авторских прав SD. Также может быть потеряно место в таблице размещения файлов и т. Д. В зависимости от формата файла (FAT16, FAT32 и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...