void CDiskInfo::SearchDisk()
{
      DWORD   dwDiskInfo;
      int    i, nCount;

      InitDiskInfo();
      dwDiskInfo = GetLogicalDrives();

      for( i = 0 ; i < DISK_COUNT ; i ++ )
      {
            if( ( dwDiskInfo & m_dwDiskDriveData[i] ) != 0x0000 )
            {
                  CString  strDrive;
                  strDrive += 'A' + i;
                  strDrive += ":\\";
                  m_arrayDiskDriver.Add(strDrive);
            }
      }

      char  szDrive[MAX_PATH];
      GetLogicalDriveStrings(MAX_PATH, szDrive);
      // szDrive를 파싱하여 드라이브 목록을 얻어 올 수 있다.

      nCount = m_arrayDiskDriver.GetUpperBound() + 1;
      m_nTotalDisk = nCount;
      for( i = 0 ; i < nCount ; i ++ )
      {
            DISK_INFO_DATA  diskData;
            diskData.strDrive = m_arrayDiskDriver.GetAt(i);
            SearchDiskInfo(m_arrayDiskDriver.GetAt(i), &diskData);
            m_arrayDiskSize.Add(diskData);
      }
}


GetLogicalDirves는 현재 컴퓨터의 Dirve 목록을 DWORD의 각 비트별로 채워주는 함수 있습니다. 이부분에 대한 설명을 생략하도록 하겠습니다. 소스에 있는 GetLogicalDirveStrings가 조금 더 쉬울 수도 있습니다.

아무튼 이런 과정을 통해서 컴퓨터 내의 드라이브 전체 목록을 얻어 오고 각 드라이브 명을 C:\ 이런 식으로 저장합니다.


SearchDiskInfo를 살펴 보도록 하겠습니다.


void CDiskInfo::SearchDiskInfo(LPCTSTR lpDriver, LPDISK_INFO_DATA lpData)
{
      LONGLONG  lFreeBytesAvailable, lTotalBytes, lTotalFree;
      UINT   DiskType;
 
      DiskType = GetDriveType(lpDriver);
      lpData->diskType = DiskType;
 
      if( DiskType == DRIVE_FIXED ) // 고정 디스크(Hard Disk)일 경우만 디스크 크기를 구한다.
      {
            GetDiskFreeSpaceEx(lpDriver, (PULARGE_INTEGER)&lFreeBytesAvailable, (PULARGE_INTEGER)&lTotalBytes, (PULARGE_INTEGER)&lTotalFree);
  
            lpData->lDiskFreeSize = lTotalFree;
            lpData->lDiskSize = lTotalBytes;
      }
      else       // 플로피, 시디롬등의 용량은 0으로 한다.
      {
            lpData->lDiskFreeSize = 0;
            lpData->lDiskSize = 0;
      }
}


생각보도 간단 합니다. DIskType을 검사해서 고정디스크 인 경우만 용량을 확인 합니다. 구지 설명을 드리지 않아도 이해하실 수 있을 것 같습니다. DISK_INFO_DATA는 제가 사용하기 위해서 만든 구조체 입니다. 소스를 보시면 이해하실 수 있을 것입니다.


이렇게 컴퓨터 전체 드라이브의 용량을 조사 한 후 GUI를 통해서 보여 주기만 하면 됩니다. 제가 만든 프로그램은 GUI가 허접하니 잘 만들어 보시길 ^^

'NativeCode > mfc' 카테고리의 다른 글

파일 찾기  (0) 2010.03.18
폴더 선택 다이알로그 BROWSEINFO  (0) 2010.03.18
하위 경로까지의 모든 파일 목록 얻기  (0) 2010.03.18
현재 위치 구하기  (0) 2010.03.18
프로세스 찾아 죽이기  (0) 2010.03.18

+ Recent posts