1. 程式人生 > >windows程式設計 獲取磁碟容量

windows程式設計 獲取磁碟容量

//磁碟分割槽的總容量(位元組)=總簇數*每簇扇區數*每扇區位元組數
//磁碟分割槽的空閒空間(位元組)=空閒簇數*每簇扇區數*每扇區位元組數
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; }