본문 바로가기
Programming/Tips(C++,C#)

하드디스크 용량 가져오기

by 곰네Zip 2016. 9. 26.

참조 : https://msdn.microsoft.com/ko-kr/library/ms890887.aspx

역시 MS에서는 웬만한건 다 오픈해 준다. 남아있는 하드디스크 용량까지도.

 

바로... GetDiskFreeSpace (!!!)

함수 원형은

 GetDiskFreeSpaceA(
    LPCSTR lpRootPathName,
    LPDWORD lpSectorsPerCluster,
    LPDWORD lpBytesPerSector,
    LPDWORD lpNumberOfFreeClusters,
    LPDWORD lpTotalNumberOfClusters
  );

 lpRootPathName : 탐색할 드라이브 경로 (최상위 root)

 lpSectorsPerCluster : 클러스터당 섹터의 수

 lpBytesPerSector : 섹터당 바이트 크기

 lpNumberOfFreeClusters : 잔여용량 클러스터의 갯수

 lpTotalNumberOfClusters : 전체 클러스터 갯수

  -> 즉, 크기를 구할때 클러스터수 * lpSectorsPerCluster *  lpBytesPerSector 로 구할 수 있다.

 

 근데 위 함수는 읽어오는 용량 제한이 있다. 그래서.. Ex가 등장(!)했다. 함수 형태는 아래와 같다.

 

 BOOL GetDiskFreeSpaceEx(
    LPCWSTR lpDirectoryName,
    PULARGE_INTEGER lpFreeBytesAvailableToCaller,
    PULARGE_INTEGER lpTotalNumberOfBytes,
    PULARGE_INTEGER lpTotalNumberOfFreeBytes
);

 

 lpDirectoryName : 탐색할 드라이브의 최상위 root.

 lpFreeBytesAvailableToCaller : 호출한 스레드에서 사용가능한 최대의 용량. (사실상 free space)

 lpTotalNumberOfBytes : 드라이브의 총 용량

 lpTotalNumberOfFreeBytes : 드라이브의 잔여 용량.  NULL이 가능하다.

 

 ULARGE_INTEGER를 사용한다. 호출 예제는 아래와 같다.

 

 ULARGE_INTEGER uiFreeSpace, uiTotalSpace, uiTotalFreeByte;
uiFreeSpace.QuadPart = 0; uiTotalSpace.QuadPart = 0; uiTotalFreeByte.QuadPart = 0;
GetDiskFreeSpaceEx(_T("C:\\"), &uiFreeSpace, &uiTotalSpace, &uiTotalFreeByte);

 단위는 byte이므로 필요에 따라 단위 변환을 하면 된다.

 

 네트워크 드라이브도 찾아온다. 와우.

반응형

댓글