首先來說明3個函數:
(1)查看系統中驅動器,函數原型DWORD GetLogicalDrives(VOID)
//這個函數可以查看驅動器的個數,返回的是一個DWORD類型的數據,每一位代表相應的驅動盤是否存在,比如返回的一個數爲0X0000
00FC(0000 0000 0000 0000 0000 0000 1111 1100)(252)其中最低位代表的是A盤,以此類推,在上數中di0位爲0,第一位爲0,第
2、3、4、5、6、7位爲1,則說明A盤B盤不存在,C盤D盤E盤F盤G盤H盤存在,其餘不存在盤;
DWORD DiskInfo; int DiskCount=0; //定義8位的整型變量
DiskInfo=GetLogicalDrives();
while(DiskInfo)
{
if(DiskInfo&1) //看該位是否爲1,爲1代表有對應的驅動器
DiskCount++;
DiskInfo>>=1; //DiskInfo=DiskInfo>>1,即DiskInfo右移一位
}
cout<<"該機器共有"<<DiskCount<<"個邏輯驅動器";
(2)取所有驅動器字符串信息,函數原型:
DWORD GetLogicalDriveStrings(
DWORD nBufferLength, // 緩衝區的長度
LPTSTRlpBuffer // 指向所有驅動器字符串的指針);
使用該函數一般分兩個步驟:
①求所有驅動器的字符串信息長度
把0傳遞給API函數GetLogicalDriveStrings()的兩個形參,函數的返回值就是所有驅動器的字符串信息長度。語句爲:DriveStringLength=GetLogicalDriveStrings(0,NULL);
②動態分配內存空間保存所有驅動器的字符串信息
通過new函數在棧區申請內存於字符指針變量DriverStr,然後把上一步求的所有驅動器的字符串信息長度DriveStringLength和準備保存所有驅動器的字符串緩衝區地址
DriverStr傳遞給API函數GetLogicalDriveStrings()的兩個形參,這樣求得的所有驅動器的字符串信息就保存到緩衝區DriverStr中,注意每個驅動器字符串的長度爲4,假設該機器
有A、B、C、D四個驅動器則在緩衝區DriverStr保存的內容是A:\<NULL>B:\<NULL>C:\<NULL>D:\<NULL><NULL>,其中<NULL>表示的是空字符,各個驅動器之間靠<NULL>
來分隔,最後以<NULL>結束。典型的代碼爲:
DriverStr=new char[DriveStringLength+1];
GetLogicalDriveStrings(DriveStringLength,(LPTSTR)DriverStr);
(3)取驅動器類型
倘若還要知道每個驅動器標識符各代表什麼類型的驅動器時,如A:代表軟盤還是硬盤,F:代表光盤還是U盤(可移動盤),就要使用API函數GetDriveType(),該函數的原型爲:
UINT GetDriveType(LPCTSTR lpRootPathName //驅動器的根目錄);
函數返回值爲驅動器的類型,若值爲DRIVE_REMOVABLE,代表的是可移動U盤,若值爲DRIVE_FIXED,代表的是固定盤,若值爲CDROM,代表的是光盤等。下面是一個實例:
#include<iostream.h>
voidmain()
{
DWORD DiskInfo;
char *DriverStr;
UINT type;
short DriveStringLength;
_int8 DiskCount=0;//定義8位的整型變量
DiskInfo=GetLogicalDrives();//取機器上的驅動器信息於DiskInfo
while(DiskInfo)
{
if(DiskInfo&1) //看該位是否爲1,爲1代表有對應的驅動器
DiskCount++;
DiskInfo>>=1;
}
cout<<"該機器共有"<<DiskCount<<"個邏輯驅動器\n";
DriveStringLength=GetLogicalDriveStrings(0,NULL);
//求整個驅動器的字符串信息的長度,每個驅動器字符串的長度爲4
DriverStr=newchar[DriveStringLength+1];
GetLogicalDriveStrings(DriveStringLength,(LPTSTR)DriverStr);
//求整個驅動器的字符串信息於DriverStr
for(short i=0;i<(int)(DriveStringLength/4);i++)
{
type=GetDriveType(DriverStr+i*4);
//取驅動器的類型是軟盤、硬盤、光盤、可移動U盤
if(type==DRIVE_CDROM) //如果是光驅的話
cout<<"驅動器"<<DriverStr+i*4<<"是光驅\n";
}
}