void CDiskInfo::SearchDisk()
{
DWORD dwDiskInfo;
int i, nCount;
InitDiskInfo();
dwDiskInfo = GetLogicalDrives();
for( i = 0 ; i < DISK_COUNT ; i ++ )
{
if( ( dwDiskInfo & m_dwDiskDriveData[i] ) != 0x0000 )
{
CString strDrive;
strDrive += 'A' + i;
strDrive += ":\\";
m_arrayDiskDriver.Add(strDrive);
}
}
char szDrive[MAX_PATH];
GetLogicalDriveStrings(MAX_PATH, szDrive);
// szDrive를 파싱하여 드라이브 목록을 얻어 올 수 있다.
nCount = m_arrayDiskDriver.GetUpperBound() + 1;
m_nTotalDisk = nCount;
for( i = 0 ; i < nCount ; i ++ )
{
DISK_INFO_DATA diskData;
diskData.strDrive = m_arrayDiskDriver.GetAt(i);
SearchDiskInfo(m_arrayDiskDriver.GetAt(i), &diskData);
m_arrayDiskSize.Add(diskData);
}
}
GetLogicalDirves는 현재 컴퓨터의 Dirve 목록을 DWORD의 각 비트별로 채워주는 함수 있습니다. 이부분에 대한 설명을 생략하도록 하겠습니다. 소스에 있는 GetLogicalDirveStrings가 조금 더 쉬울 수도 있습니다.
아무튼 이런 과정을 통해서 컴퓨터 내의 드라이브 전체 목록을 얻어 오고 각 드라이브 명을 C:\ 이런 식으로 저장합니다.
SearchDiskInfo를 살펴 보도록 하겠습니다.
void CDiskInfo::SearchDiskInfo(LPCTSTR lpDriver, LPDISK_INFO_DATA lpData)
{
LONGLONG lFreeBytesAvailable, lTotalBytes, lTotalFree;
UINT DiskType;
DiskType = GetDriveType(lpDriver);
lpData->diskType = DiskType;
if( DiskType == DRIVE_FIXED ) // 고정 디스크(Hard Disk)일 경우만 디스크 크기를 구한다.
{
GetDiskFreeSpaceEx(lpDriver, (PULARGE_INTEGER)&lFreeBytesAvailable, (PULARGE_INTEGER)&lTotalBytes, (PULARGE_INTEGER)&lTotalFree);
lpData->lDiskFreeSize = lTotalFree;
lpData->lDiskSize = lTotalBytes;
}
else // 플로피, 시디롬등의 용량은 0으로 한다.
{
lpData->lDiskFreeSize = 0;
lpData->lDiskSize = 0;
}
}
생각보도 간단 합니다. DIskType을 검사해서 고정디스크 인 경우만 용량을 확인 합니다. 구지 설명을 드리지 않아도 이해하실 수 있을 것 같습니다. DISK_INFO_DATA는 제가 사용하기 위해서 만든 구조체 입니다. 소스를 보시면 이해하실 수 있을 것입니다.
이렇게 컴퓨터 전체 드라이브의 용량을 조사 한 후 GUI를 통해서 보여 주기만 하면 됩니다. 제가 만든 프로그램은 GUI가 허접하니 잘 만들어 보시길 ^^
'NativeCode > mfc' 카테고리의 다른 글
파일 찾기 (0) | 2010.03.18 |
---|---|
폴더 선택 다이알로그 BROWSEINFO (0) | 2010.03.18 |
하위 경로까지의 모든 파일 목록 얻기 (0) | 2010.03.18 |
현재 위치 구하기 (0) | 2010.03.18 |
프로세스 찾아 죽이기 (0) | 2010.03.18 |