2008. 9. 19. 19:05

하드디스크 용량 가져오기


GetDiskFreeSpaceEx() 라는 함수가 하드디스크의 총 용량, 사용 용량, 남은 용량을 가져오는 함수이다.

MSDN을 살펴보면 다음과 같이 함수가 정의되어 있다.
BOOL WINAPI GetDiskFreeSpaceEx(
  __in LPCTSTR lpDirectoryName,
  __out PULARGE_INTEGER lpFreeBytesAvailable,
  __out PULARGE_INTEGER lpTotalNumberOfByte,
  __out PULARGE_INTEGER lpTotalNumberOfFreeBytes
);

사용법은 직관적으로 함수의 인자를 보면 알 수 있을 것이다.
첫 번째 인자에 원하는 파티션의 경로(c:\, d:\ 등의)를 넣어준다. 그러면 나머지 인자에서 원하는 정보를 얻을 수 있다.

간단한 예제를 가지고 사용하는 방법을 알아본다. 나중에 필요할 때 대충 참고할 요령으로.. ^^;

ULARGE_INTEGER avail, total, free;
avail.QuadPart = 0L;
total.QuadPart = 0L;
free.QuadPart = 0L;
int m_avail, m_total, m_free;
TCHAR buf[125];

// C:\의 하드디스크 용량 정보를 받아올 것이다.
GetDiskFreeSpaceEx(TEXT("c:\\"), &avail, &total, &free);

// GByte 로 표현을 하기 위한 부분.. MByte는 숫자가 너무커서... -_-;
m_total = (int)(total.QuadPart>>30);
m_free = (int)(free.QuadPart>>30);

// 간단하게 메시지 박스로 출력을 해서 확인한다.
wsprintf(buf, TEXT("실제용량 %d GByte, 남은용량 %d GByte"), m_total, m_free);
MessageBox(hWnd, buf, TEXT("test"), MB_OK);
참고로 MByte 단위로 하드디스크의 용량을 계산하고자 한다면 아래와 같이 수정을 해주면 된다.
m_total = (int)(total.QuadPart >> 20);
m_free = (int)(free.QuadPart >> 20);