사용가능한 모든 하드 디스크에 대해서 요량을 출력하는 소스입니다.
약간 다듬어서 사용하면 될 것 같습니다.

void GetHddSpace(CString strDir, CString& strTotalSize, CString& strUsingSize, CString& strFreeSize)
{
 ULARGE_INTEGER m_pFreeSpace;  // 남은용량
 ULARGE_INTEGER m_pTotalSpace;  // 전체용량
 ULARGE_INTEGER m_pWritedSpace;  // 쓰고있는용량

 GetDiskFreeSpaceEx(
  strDir,  // directory name
  &m_pFreeSpace,   // 남은용량
  &m_pTotalSpace,         // 전체용량
  &m_pWritedSpace   // 쓰고있는용량
  );

 m_pWritedSpace.QuadPart = m_pTotalSpace.QuadPart - m_pFreeSpace.QuadPart;

 //strBuf.Format(_T("Total: %I64d \nUsing: %I64d \nFree: %I64d"),m_pTotalSpace.QuadPart/GBYTE, m_pWritedSpace.QuadPart/GBYTE, m_pFreeSpace.QuadPart/GBYTE);
 ULONGLONG GBSize = m_pTotalSpace.QuadPart/(1024*1024*1024);
 ULONGLONG MBSize = ((m_pTotalSpace.QuadPart%(1024*1024*1024))*10)/(1024*1024*1024);

 strTotalSize.Format("%I64d.%I64dGB", m_pTotalSpace.QuadPart/(1024*1024*1024), ((m_pTotalSpace.QuadPart%(1024*1024*1024))*10)/(1024*1024*1024));
 strUsingSize.Format("%I64d.%I64dGB", m_pWritedSpace.QuadPart/(1024*1024*1024), ((m_pWritedSpace.QuadPart%(1024*1024*1024))*10)/(1024*1024*1024));
 strFreeSize.Format("%I64d.%I64dGB", m_pFreeSpace.QuadPart/(1024*1024*1024), ((m_pFreeSpace.QuadPart%(1024*1024*1024))*10)/(1024*1024*1024));
}

int GetValidDrives(CStringArray& rarrayDrives) const
{
 rarrayDrives.RemoveAll();
 
 DWORD dwDrives = ::GetLogicalDrives();
 
 for (int n = 0; n < 26; n++)
 {
  BOOL bAvail = (dwDrives & (0x01 << n) );
  
  if (bAvail)
  {
   TCHAR chDrive = (TCHAR)( ((int)_T('A')) + n);
   
   CString sDrive;
   sDrive.Format( _T("%c:\\"), chDrive);

   if(GetDriveType(sDrive) == DRIVE_FIXED)
    rarrayDrives.Add(sDrive);
  }
 }
 return rarrayDrives.GetSize();
}

void OnBtnHdd()
{
 // TODO: Add your control notification handler code here
 CString strTotal, strUsing, strFree;
 CString strTmp;
 CStringArray strHddList;

 GetValidDrives(strHddList);

 for(int i=0; i<strHddList.GetSize(); i++)
 {
  GetHddSpace(strHddList[i], strTotal, strUsing, strFree);
  strTmp.Format("드라이브:%s\n총 용량:%s\n사용중인 용량:%s\n잔여 용량:%s", strHddList[i], strTotal, strUsing, strFree);
  AfxMessageBox(strTmp);
 }
}

'프로그래밍 팁 > etc' 카테고리의 다른 글

바로가기 아이콘 생성  (0) 2010.05.14
메모리 정보 확인  (0) 2010.04.20
네트워크 정보(사운드카드, 맥어드레스, IP주소)  (0) 2010.04.17
printf와 같은 포멧  (0) 2010.04.15
URLDownloadToFile 예제  (0) 2010.04.13
Posted by 띠깜
,