Q: How can I check the free space on a partition?
A:
Code: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 -> call ::GetLastError()




Reply With Quote