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으로 나옵니다.
실행 결과:
"남은 용량*" 이렇게 별표가 붙은 용량은, 하드의 전체 남은 용량이 아니라 "현재 사용자에게 할당된 용량 중에서 남은 용량"입니다.
< INFO: Understanding and Using GetDiskFreeSpace and GetDiskFreeSpaceEx >(2024-06-04: 현재 폐쇄됨)에 있는 원본 소스에서, 윈도95 버전 지원 기능을 제거하는 등, 조금 간단하게 만든 것입니다.
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));
}
#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)
전체 용량 = 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 >(2024-06-04: 현재 폐쇄됨)에 있는 원본 소스에서, 윈도95 버전 지원 기능을 제거하는 등, 조금 간단하게 만든 것입니다.
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home