컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Monday, October 09, 2006

C언어] 하드 디스크 남은 용량, 사용한 용량, 전체 용량 얻기 읽기: Get Disk Free Space VC++


비주얼C++(Visual C++)로, 하드나 각종 드라이브의 용량을 얻는 것은 조금 복잡합니다. 이것은 하드 C: 드라이브의 전체 용량과, 사용한 용량, 남은 용량을 보는 프로그램 소스입니다.


char *pszDrive = "D:";
이 부분을 이렇게 D: 로 바꾸어 주면 D: 드라이브의 용량이 나옵니다.

하드 디스크는 물론이고 플로피 디스크 (A:) 나, CD-ROM 과 DVD 의 용량도 얻을 수 있습니다. 물론 CD-ROM 과 DVD 의 경우에는, 남은 용량이 항상 0으로 나옵니다.


하드 디스크 남은 용량 보는 예제


#include <stdio.h>
#include <Windows.h>

typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);


void main(void) {
  BOOL fResult;
  char *pszDrive  = "C:";


  P_GDFSE pGetDiskFreeSpaceEx = NULL;

  unsigned __int64 i64FreeBytesToCaller,
                   i64TotalBytes,
                   i64FreeBytes;


  pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress (
                                                 GetModuleHandle ("kernel32.dll"), "GetDiskFreeSpaceExA"
                                                 );

  fResult = pGetDiskFreeSpaceEx (pszDrive,
                                (PULARGE_INTEGER)&i64FreeBytesToCaller,
                                (PULARGE_INTEGER)&i64TotalBytes,
                                (PULARGE_INTEGER)&i64FreeBytes);

  if (!fResult) {
    printf ("ERROR: Could not get free space for %s\n", pszDrive);
    exit(GetLastError());
  }


  unsigned __int64 UsedBytes = i64TotalBytes - i64FreeBytes;

  printf ("%s\n", pszDrive);
  printf ("전체 용량    = %I64u MB, (%.1f GB)\n\n", i64TotalBytes        / (1024*1024), (double) i64TotalBytes        / (1024*1024*1024));

  printf ("사용한 용량  = %I64u MB, (%.1f GB)\n",   UsedBytes            / (1024*1024), (double) UsedBytes            / (1024*1024*1024));
  printf ("남은 용량    = %I64u MB, (%.1f GB)\n",   i64FreeBytes         / (1024*1024), (double) i64FreeBytes         / (1024*1024*1024));
  printf ("남은 용량*   = %I64u MB, (%.1f GB)\n",   i64FreeBytesToCaller / (1024*1024), (double) i64FreeBytesToCaller / (1024*1024*1024));

}


실행 결과:
C:
전체 용량    = 8189 MB, (8.0 GB)

사용한 용량  = 2362 MB, (2.3 GB)
남은 용량    = 5827 MB, (5.7 GB)
남은 용량*   = 5827 MB, (5.7 GB)

"남은 용량*" 이렇게 별표가 붙은 용량은, 하드의 전체 남은 용량이 아니라 "현재 사용자에게 할당된 용량 중에서 남은 용량"입니다.


INFO: Understanding and Using GetDiskFreeSpace and GetDiskFreeSpaceEx 에 있는 원본 소스에서, 윈도95 버전 지원 기능을 제거하는 등, 조금 간단하게 만든 것입니다.



☞ C/C++

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top