Размер кластера в .NET Compact Framework - PullRequest
4 голосов
/ 21 мая 2009

Я пытаюсь программно определить размер кластера карты памяти, используя C # / .NET Compact Framework, в Widows Mobile. Для настольных Windows есть функция GetDiskFreeSpace (), но она не существует в coredll.dll / Windows Mobile.

Есть ли другой способ узнать размер кластера для карты памяти?

Ответы [ 2 ]

2 голосов
/ 21 мая 2009

Я сам не пробовал, но вы можете попробовать CeGetVolumeInfo и проверить значение dwBlockSize. Похоже, это может быть размер кластера.

Если это не сработает, тогда это будет немного сложнее.

Карты памяти обычно отформатированы в формате FAT .

Вам необходим доступ к подпрограммам нижнего уровня в CE, чтобы читать на уровне диска и читать FAT BPB, чтобы определить тип FAT и размер кластера.

Используйте Диспетчер хранилища Функции FindFirstStore / FindNextStore, чтобы найти нужную карту памяти. Затем откройте карту памяти с помощью API CreateFile.

HANDLE hDisk (CreateFile (storeInfo.szDeviceName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) *

Затем вам нужно прочитать FAT BPB, который находится в первом секторе для супер дисков (что было бы обычным случаем для устройств, отформатированных в карте памяти) или в формате MBR.

  SG_REQ req;
  DWORD cb;

  req.sr_start = 0;
  req.sr_num_sec = 1;
  req.sr_num_sg = 1;
  req.sr_status = 0;
  req.sr_callback = 0;
  req.sr_sglist[0].sb_buf = sectorBuffer;
  req.sr_sglist[0].sb_len = storeInfo.dwBytesPerSector;

  DeviceIoControl(hDisk, DISK_IOCTL_READ, &req, sizeof(req), 0, 0, &cb, 0);

После того, как у вас есть BPB, вам нужно определить, какой это жирный формат (FAT12 / FAT16 / FAT32), а затем извлечь из него размер кластера.

Как вы это делаете в C #, зависит от вас. Я вижу в справочнике менеджера хранилища, он может опуститься до уровня раздела, и вы можете запросить тип раздела. Это скажет вам тип FAT, так что вам не нужно это выяснять.

1 голос
/ 21 мая 2009

Это сообщение на форуме дает представление о том, что у кого-то еще есть эта проблема.

...