Click to See Complete Forum and Search --> : Windows SDK File System: How can I check the free space on a partition?


Andreas Masur
October 2nd, 2004, 03:20 PM
Q: How can I check the free space on a partition?

A:


typedef BOOL (WINAPI *PFNGETDISKFREESPACEEX)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);

#include <iostream>

HINSTANCE hModule = ::LoadLibrary("KERNEL32.DLL");
if(hModule)
{
PFNGETDISKFREESPACEEX pDiskFreeSpaceEx = NULL;

// Determine function to use
pDiskFreeSpaceEx = reinterpret_cast<PFNGETDISKFREESPACEEX>(::GetProcAddress(hModule,
"GetDiskFreeSpaceExA"));
if(!pDiskFreeSpaceEx)
{
DWORD dwSectorsPerCluster = 0;
DWORD dwBytesPerSector = 0;
DWORD dwFreeClusters = 0;
DWORD dwClusters = 0;

if(::GetDiskFreeSpace(strRootPath.c_str(),
&dwSectorsPerCluster,
&dwBytesPerSector,
&dwFreeClusters,
&dwClusters) == TRUE)
std::cout << "Available disk space = "
<< dwFreeClusters * dwBytesPerSector * dwSectorsPerCluster << " MB" << std::endl;
else
// Error
}
else
{
ULARGE_INTEGER uliFreeBytesAvailableToCaller;
ULARGE_INTEGER uliTotalNumberOfBytes;
ULARGE_INTEGER uliTotalNumberOfFreeBytes;

if(::GetDiskFreeSpaceEx(strRootPath.c_str(),
&uliFreeBytesAvailableToCaller,
&uliTotalNumberOfBytes,
&uliTotalNumberOfFreeBytes) == TRUE)
std::cout << "Available disk space = "
<< static_cast<int>(static_cast<__int64>(uliFreeBytesAvailableToCaller.QuadPart /
(1024 * 1024)))
<< " MB" << std::endl;
else
// Error
}

// Release library
::FreeLibrary(hModule);
}
else
// Error -&gt; call ::GetLastError()

<br>