DWORD ZipPlatform::GetDeviceFreeSpace(LPCTSTR lpszPath) { DWORD SectorsPerCluster, BytesPerSector, NumberOfFreeClusters, TotalNumberOfClusters; CZipPathComponent zpc (lpszPath); CZipString szDrive = zpc.GetFileDrive(); if (!GetDiskFreeSpace( szDrive, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters)) { CZipPathComponent::AppendSeparator(szDrive); // in spite of what is written in MSDN it is sometimes needed (on fixed disks) if (!GetDiskFreeSpace( szDrive, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters)) return 0; } __int64 total = SectorsPerCluster * BytesPerSector * NumberOfFreeClusters; return (DWORD)total; }
ULONGLONG ZipPlatform::GetDeviceFreeSpace(LPCTSTR lpszPath) { ULONGLONG uFreeBytesToCaller = 0, uTotalBytes = 0, uFreeBytes = 0; CZipPathComponent zpc (lpszPath); CZipString szDrive = zpc.GetFileDrive(); if (!GetDiskFreeSpaceEx( szDrive, (PULARGE_INTEGER)&uFreeBytesToCaller, (PULARGE_INTEGER)&uTotalBytes, (PULARGE_INTEGER)&uFreeBytes)) { CZipPathComponent::AppendSeparator(szDrive); // in spite of what is written in MSDN it is sometimes needed (on fixed disks) if (!GetDiskFreeSpaceEx( szDrive, (PULARGE_INTEGER)&uFreeBytesToCaller, (PULARGE_INTEGER)&uTotalBytes, (PULARGE_INTEGER)&uFreeBytes)) return 0; } return uFreeBytes; }