Widows MobileでC#/ .NET Compact Frameworkを使用して、ストレージカードのクラスタサイズをプログラム的に決定しようとしています。 デスクトップWindowsにはGetDiskFreeSpace()関数がありますが、coredll.dll/Windows Mobileには存在しません。.NET Compact Frameworkのクラスタサイズ
ストレージカードのクラスタのサイズを調べる方法はありますか。
Widows MobileでC#/ .NET Compact Frameworkを使用して、ストレージカードのクラスタサイズをプログラム的に決定しようとしています。 デスクトップWindowsにはGetDiskFreeSpace()関数がありますが、coredll.dll/Windows Mobileには存在しません。.NET Compact Frameworkのクラスタサイズ
ストレージカードのクラスタのサイズを調べる方法はありますか。
このforum postは、この問題を抱えている他の人のアイデアを示しています。
私はこれを試していませんが、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、NULL、OPEN_EXISTING、0、NULL));
スーパーディスクの最初のセクタにあるFAT BPB(Storage Cardでフォーマットされたデバイスの通常の場合)または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を持っていたら、あなたはそれが(FAT12/FAT16/FAT32)でどのような脂肪フォーマットを決定し、それから、クラスタサイズを引き出す必要があります。
上記のC#のやり方はあなた次第です。私は、ストレージマネージャの参照で、パーティションレベルまで下がり、パーティションタイプを問い合わせることができます。それはあなたにFATタイプを教えてくれるので、それを理解する必要はありません。