Programming/MFC

GetDiskFreeSpaceEx 사용예[중요!!]

_Erato 2007. 10. 10. 20:38
출처 푸른새 | 푸른새
원문 http://blog.naver.com/sharpsimmon/10009258700


#include <windows.h>
#include <stdio.h>

typedef BOOL (WINAPI *PGETDISKFREESPACEEX)(LPCSTR,
   PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);


BOOL MyGetDiskFreeSpaceEx(LPCSTR pszDrive)
{
   PGETDISKFREESPACEEX pGetDiskFreeSpaceEx;
   __int64 i64FreeBytesToCaller, i64TotalBytes, i64FreeBytes;
 
   DWORD dwSectPerClust,
         dwBytesPerSect,
         dwFreeClusters,
         dwTotalClusters;

   BOOL fResult;

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

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

   // Process GetDiskFreeSpaceEx results.
      if(fResult)
      {
         printf("Total free bytes =%I64d\n", i64FreeBytes);
      }
      return fResult;
   }

   else
   {
      fResult =GetDiskFreeSpaceA(pszDrive,
                 &dwSectPerClust,
                 &dwBytesPerSect,
                 &dwFreeClusters,
                 &dwTotalClusters);

   // Process GetDiskFreeSpace results.
      if(fResult)
      {
         printf("Total free bytes =%I64d\n", dwFreeClusters*dwSectPerClust*dwBytesPerSect);
      }
      return fResult;
   }
}
int main(int argc, char *argv[])
{
 MyGetDiskFreeSpaceEx ("C:");
}