출력
소스
C:\ Total : 20002 MByte Free : 1225 MByte D:\ Total : 132614 MByte Free : 26944 MByte E:\ Total : 61443 MByte Free : 61373 MByte F:\ Total : 171898 MByte Free : 156790 MByte G:\ Total : 5130 MByte Free : 3876 MByte http://fehead.tistory.com
소스
#include <windows.h> #include <iostream> #include <direct.h> using namespace std; struct ST_HDDUsage { unsigned long total; // MByte unsigned long free; // MByte }; class HddUsage { typedef BOOL (WINAPI *GET_DISK_FREE_SPACE_EX)( LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER); private: HINSTANCE m_hInstLib; GET_DISK_FREE_SPACE_EX m_pGetDiskFreeSpaceEx; public: HddUsage() : m_hInstLib( 0 ), m_pGetDiskFreeSpaceEx( 0 ) {} ~HddUsage() { destroy(); } bool init() { m_hInstLib = LoadLibrary( "kernel32.dll" ); if( m_hInstLib == 0 ) return false; m_pGetDiskFreeSpaceEx = reinterpret_cast<GET_DISK_FREE_SPACE_EX>( GetProcAddress( m_hInstLib, "GetDiskFreeSpaceExA") ); if( m_pGetDiskFreeSpaceEx == 0 ) return false; return true; } void destroy() { if( m_hInstLib ) FreeLibrary( m_hInstLib); m_hInstLib = 0; } bool GetDiskUsage( const char * pszDrive, ST_HDDUsage * pHddUsage ) { unsigned __int64 i64FreeBytesToCaller = 0; unsigned __int64 i64TotalBytes = 0; unsigned __int64 i64FreeBytes = 0; BOOL ret = m_pGetDiskFreeSpaceEx( pszDrive, reinterpret_cast<PULARGE_INTEGER>( &i64FreeBytesToCaller ), reinterpret_cast<PULARGE_INTEGER>( &i64TotalBytes ), reinterpret_cast<PULARGE_INTEGER>( &i64FreeBytes ) ); if( !ret ) return false; pHddUsage->total = static_cast<unsigned long >( i64TotalBytes / (1024*1024) ); // Hdd total (MByte) pHddUsage->free = static_cast<unsigned long >( i64FreeBytes / (1024*1024) ); // Hdd Free (MByte) return true; } }; int main(int, char *[]) { HddUsage hddUsage; if( hddUsage.init() ) { // 있는 하드 디스크만 출력. char driveName[4] = "A:\\"; for( ULONG uDriveMask = _getdrives() ; uDriveMask ; uDriveMask >>= 1 ) { if( uDriveMask & 1 ) { // 하드 디스크일때만 출력. if( GetDriveType( driveName ) == DRIVE_FIXED ) { ST_HDDUsage hdd; if( hddUsage.GetDiskUsage( driveName, &hdd ) ) { cout << driveName << " Total : " << hdd.total << " MByte\t Free : " << hdd.free << " MByte\n"; } } } ++driveName[0]; // 드라이브명 변경. A:\, B:\ ~~~Z:\~~ } } cout << "\t\thttp://fehead.tistory.com\n"; return 0; }