2009-05-20 4 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));

그런 다음 수퍼 디스크의 첫 번째 섹터에있는 FAT BPB를 읽어야합니다 (이는 Storage Card 형식 장치의 일반적인 경우) 또는 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 유형을 알 수 있으므로 알아낼 필요가 없습니다.

관련 문제