2009-05-20 12 views
4

Widows MobileでC#/ .NET Compact Frameworkを使用して、ストレージカードのクラスタサイズをプログラム的に決定しようとしています。 デスクトップWindowsにはGetDiskFreeSpace()関数がありますが、coredll.dll/Windows Mobileには存在しません。.NET Compact Frameworkのクラスタサイズ

ストレージカードのクラスタのサイズを調べる方法はありますか。

答えて

1

このforum postは、この問題を抱えている他の人のアイデアを示しています。

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、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タイプを教えてくれるので、それを理解する必要はありません。

関連する問題