2009-05-20 72 views
4

我試圖在Widows Mobile上使用C#/ .NET Compact Framework以編程方式確定存儲卡的簇大小。 對於桌面Windows,有GetDiskFreeSpace()函數,但它不存在於coredll.dll/Windows Mobile中。.NET Compact Framework中的簇大小

有沒有其他方法可以找出存儲卡的羣集大小?

回答

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));

然後,您需要讀取超級磁盤的第一個扇區(這將是存儲卡格式化設備的正常情況)或MBR格式的FAT BPB。

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你需要確定哪些FAT格式是(FAT12/FAT16/FAT32),然後從它拉出簇大小。

你如何在C#中完成上述任務取決於你。我在存儲管理器參考中看到它可以降到分區級別,並且可以查詢分區類型。這會告訴你FAT的類型,所以你不需要弄清楚。