windows api 獲取磁盤信息


使用的API函數有

1、GetLogicalDriveStrings  用於獲取邏輯驅動器字符串

函數原型:DWORD GetLogicalDriveStrings(DWORD nBufferLength,
LPTSTR lpBuffer);

LPTSTR:字符/字符串指針

函數需要提供一個內存緩沖區lpBuffer來供它保存獲取的邏輯驅動器的分區號(C:\ ,D:\等)信息。

2、GetDriveType  邏輯驅動器類型

函數聲明如下:

UINT WINAPI GetDriveType(

  _In_opt_ LPCTSTR lpRootPathName

);

 用於判斷一個磁盤驅動器的類型

如驅動器不能識別,則返回零。如指定的目錄不存在,則返回1。如執行成功,則返回指定驅動器類型

 

3、GetDiskFreeSpaceEx  獲取邏輯驅動器的容量信息

函數執行成功返回非0值,失敗返回0。

 

4、GetLogicalDrives:

 

DWORD GetLogicalDrives(void); 返回值:GetLogicalDrives函數返回一個DWORD類型的值,第一位表示所對應的驅動器是否存在。一般情況下DWORD的數據長度是32位,在這個DWORD中,每一位對應了一個邏輯驅動器是否存在。第二位如果是“1”則表示驅動器“B:”存在,第四位如果是“1”則表示驅動器“D:”存在,以此類推。

 

以下為代碼示例:

#include <stdio.h>
#include <Windows.h>

#define GB(x) (x.HighPart << 2) + (x.LowPart >> 20) / 1024.0   // 轉換為GB單位顯示

void putDrivesType(const char* lpRootPathName);
void putDrivesFreeSpace(const char* lpRootPathName);

int main()
{

int count = 0;
DWORD dw ;
DWORD dwSize = MAX_PATH;

char szLogicalDrives[MAX_PATH] = {0}; //緩沖區
DWORD dwResult = GetLogicalDriveStrings(dwSize,szLogicalDrives); //獲取邏輯驅動器號字符串
//獲取驅動器數
dw = GetLogicalDrives();
while( dw != 0 )
{
if(dw&1 != 0)
{
count++;
}
dw>>=1;
}
printf("驅動器個數:%d\n",count);
//處理獲取到的結果
if (dwResult > 0 && dwResult <= MAX_PATH) {
char* szSingleDrive = szLogicalDrives; //從緩沖區起始地址開始
while(*szSingleDrive) {
printf("Drive: %s ", szSingleDrive); //輸出單個驅動器的驅動器號
putDrivesType(szSingleDrive); //輸出邏輯驅動器類型
putDrivesFreeSpace(szSingleDrive); //獲取磁盤空間信息
printf("----------------------------\n");
// 獲取下一個驅動器號起始地址
szSingleDrive += strlen(szSingleDrive) + 1;
}
}
return 0;
}


void putDrivesType(const char* lpRootPathName)
{
UINT uDriverType = GetDriveType(lpRootPathName);

switch(uDriverType) {
case DRIVE_UNKNOWN :puts("未知的磁盤類型"); break;
case DRIVE_NO_ROOT_DIR: puts("路徑無效"); break;
case DRIVE_REMOVABLE: puts("可移動磁盤"); break;
case DRIVE_FIXED: puts("固定磁盤"); break;
case DRIVE_REMOTE: puts("網絡磁盤"); break;
case DRIVE_CDROM: puts("光驅"); break;
case DRIVE_RAMDISK: puts("內存映射盤"); break;
default:
break;
}

}

void putDrivesFreeSpace(const char* lpRootPathName)
{
ULARGE_INTEGER available,total,free; //ULARGE_INTEGER  一個64位的無符號整型值
if(GetDiskFreeSpaceEx(lpRootPathName,(ULARGE_INTEGER*)&available,(ULARGE_INTEGER*)&total,(ULARGE_INTEGER*)&free)){
printf(" | 總容量 = %.2f GB,可用空間 = %.2f GB,空閑空間 = %.2f GB\n",
GB(total),GB(available),GB(free));
}else{
puts("獲取容量信息失敗");
}
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM