.NET Compact Framework中的簇大小

时间:2009-05-20 20:19:53

标签: .net windows-mobile compact-framework storage

我正在尝试使用Widows Mobile上的C#/ .NET Compact Framework以编程方式确定存储卡的簇大小。 对于桌面Windows,有GetDiskFreeSpace()函数,但它在coredll.dll / Windows Mobile中不存在。

有没有其他方法可以找出存储卡的群集大小?

2 个答案:

答案 0 :(得分:2)

我自己没试过,但你可以尝试CeGetVolumeInfo并检查dwBlockSize值。看起来它可能是簇大小。

如果这不起作用,那么它会更多地参与其中。

存储卡通常以FAT format格式化。

您需要访问CE中的低级例程以读取磁盘级别并读取FAT BPB,它确定FAT的类型和簇大小。

使用Storage Manager函数FindFirstStore / FindNextStore查找您所追踪的存储卡。然后使用CreateFile API打开存储卡。

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 :(得分:1)

forum post提供了其他人遇到此问题的一些想法。