windows程式設計 獲取磁碟容量
阿新 • • 發佈:2018-12-27
//磁碟分割槽的總容量(位元組)=總簇數*每簇扇區數*每扇區位元組數 //磁碟分割槽的空閒空間(位元組)=空閒簇數*每簇扇區數*每扇區位元組數 BOOL GetDiskFreeSpace( LPCTSTR lpRootPathName,//指向所要獲取磁碟空間資訊的磁碟分割槽根路徑字串 LPDWORD lpSectorsPerCluster,//指向儲存每簇扇區數的DWORD型別變數 LPDWORD lpBytesPerSector,//指向儲存每扇區位元組數的DWORD型別變數 LPDWORD lpNumberOfFreeClusters,//指向儲存空閒簇的DWORD型別變數 LPDWORD lpTotalNumberOfClusters//指向儲存總簇數的DWORD型別變數 );
/* ************************************************************** * BOOL GetDiskFreeSpaceEx * 功能: * 獲取使用者可用的空閒空間位元組數、空閒空間的位元組數、磁碟總容量的位元組數 * 引數: * LPCTSTR lpDirectoryName * 指向所要獲取磁碟空閒資訊的磁碟分割槽根路徑字串 * PULARGE_INTEGER lpFreeBytesAvailable * 指向用於儲存可獲得的總位元組數量的變數,使用者實際可用的空閒空間 * PULARGE_INTEGER lpTotalNumberOfBytes * 指向儲存磁碟空間總位元組資料的變數 * PULARGE_INTEGER lpTotalNUmberOfFreeBytes * 指向儲存磁碟空閒空間總位元組的變數 * 返回值: * 返回BOOL值,表示資訊獲取是否成功 ***************************************************************/ BOOL GetDiskFreeSpaceEx( LPCTSTR lpDirectoryName,//指向所要獲取磁碟空閒資訊的磁碟分割槽根路徑字串 PULARGE_INTEGER lpFreeBytesAvailable,//指向用於儲存可獲得的總位元組數量的變數 PULARGE_INTEGER lpTotalNumberOfBytes,//指向儲存磁碟空間總位元組資料的變數 PULARGE_INTEGER lpTotalNUmberOfFreeBytes//指向儲存磁碟空閒空間總位元組的變數 );
程式碼演示
#include <windows.h> #include<stdio.h> /* ********************************************************************** * BOOL GetDiskSpaceInfo(LPCSTR pszDrive) * 功能:根據輸入的驅動器,獲取磁碟總容量、空閒空間、簇數量等磁碟資訊 * 引數:驅動器根路徑,比如:“D:\” ***********************************************************************/ BOOL GetDiskSpaceInfo(LPCSTR pszDrive) { DWORD64 qwFreeBytesToCaller, qwTotalBytes, qwFreeBytes; DWORD dwSectPerClust, dwBytesPerSect, dwFreeClusters, dwTotalClusters; BOOL bResult; printf("%s\n", pszDrive); //使用GetDiskFreeSpaceEx獲取磁碟資訊並列印結果 bResult = GetDiskFreeSpaceExA( pszDrive, (PULARGE_INTEGER)&qwFreeBytesToCaller, (PULARGE_INTEGER)&qwTotalBytes, (PULARGE_INTEGER)&qwFreeBytes ); if(bResult) { printf("使用GetDiskFreeSpaceEx獲取磁碟空間資訊\n"); printf("可獲得的空閒空間(位元組):\t%I64d\n", qwFreeBytesToCaller); printf("空閒空間(位元組):\t\t%I64d\n", qwFreeBytes); printf("磁碟總容量(位元組):\t\t%I64d\n", qwTotalBytes); } //使用GetDiskFreeSpace獲取磁碟資訊並列印結果 bResult = GetDiskFreeSpaceA( pszDrive, &dwSectPerClust, &dwBytesPerSect, &dwFreeClusters, &dwTotalClusters ); if(bResult) { printf("\n使用GetDiskFreeSpace獲取磁碟空間資訊\n"); printf("空閒的簇數量:\t\t%d\n", dwFreeClusters); printf("總簇數量:\t\t%d\n", dwTotalClusters); printf("每簇的扇區數量:\t%d\n", dwSectPerClust); printf("每扇區的容量(位元組):\t%d\n", dwBytesPerSect); printf("空閒空間(位元組):\t%I64d\n",(DWORD64)dwFreeClusters*(DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect); printf("磁碟總容量(位元組):\t%I64d\n",(DWORD64)dwTotalClusters*(DWORD64)dwSectPerClust*(DWORD64)dwBytesPerSect); } return bResult; } int main(void) { GetDiskSpaceInfo("c:"); return 0; }