国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C++ 通過WIN32 API 獲取邏輯磁盤詳細(xì)信息

2019-11-17 05:25:53
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
眾所周知,在微軟的操作系統(tǒng)下編寫應(yīng)用程序,最主要的還是通過windows所提供的api函數(shù)來(lái)實(shí)現(xiàn)各種操作的,這些函數(shù)通常是可以直接使用的,只要包含windows.h這個(gè)頭文件, 下載源文件今天我們主要介紹的是幾個(gè)常用的api函數(shù),通過它我們可以獲取用戶磁盤的相關(guān)信息。 其主要函數(shù)原型說明如下: 1.獲取系統(tǒng)中邏輯驅(qū)動(dòng)器的數(shù)量The GetLogicalDrives function retrieves a bitmask rePResenting the currently available disk drives.DWord GetLogicalDrives(void); 2.獲取所有驅(qū)動(dòng)器字符串信息The GetLogicalDriveStrings function fills a buffer with strings that specify valid drives in the system.DWORD GetLogicalDriveStrings( DWORD nBufferLength, LPTSTR lpBuffer); 3.獲取驅(qū)動(dòng)器類型The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. UINT GetDriveType( LPCTSTR lpRootPathName); 4. 獲取驅(qū)動(dòng)器磁盤的空間狀態(tài),函數(shù)返回的是個(gè)BOOL類型數(shù)據(jù)The GetDiskFreeSpaceEx function retrieves information about the amount of space available on a disk volume: the total amount of space, the total amount of free space, and the total amount of free space available to the user associated with the calling thread.BOOL GetDiskFreeSpaceEx( LPCTSTR lpDirectoryName, PULARGE_INTEGER lpFreeBytesAvailable, PULARGE_INTEGER lpTotalNumberOfBytes, PULARGE_INTEGER lpTotalNumberOfFreeBytes); 以下是完整的示例程序代碼//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必注名出處和作者#include <iostream>#include <windows.h>using namespace std; int main(){ int DiskCount = 0; DWORD DiSKINfo = GetLogicalDrives();
//利用GetLogicalDrives()函數(shù)可以獲取系統(tǒng)中邏輯驅(qū)動(dòng)器的數(shù)量,函數(shù)返回的是一個(gè)32位無(wú)符號(hào)整型數(shù)據(jù)。 while(DiskInfo)//通過循環(huán)操作查看每一位數(shù)據(jù)是否為1,假如為1則磁盤為真,假如為0則磁盤不存在。 { if(DiskInfo&1)//通過位運(yùn)算的邏輯與操作,判定是否為1 { ++DiskCount; } DiskInfo = DiskInfo >> 1;//通過位運(yùn)算的右移操作保證每循環(huán)一次所檢查的位置向右移動(dòng)一位。 //DiskInfo = DiskInfo/2; } cout<<"邏輯磁盤數(shù)量:"<<DiskCount<<endl;//------------------------------------------------------------------- int DSLength = GetLogicalDriveStrings(0,NULL); //通過GetLogicalDriveStrings()函數(shù)獲取所有驅(qū)動(dòng)器字符串信息長(zhǎng)度。 char* DStr = new char[DSLength];//用獲取的長(zhǎng)度在堆區(qū)創(chuàng)建一個(gè)c風(fēng)格的字符串?dāng)?shù)組 GetLogicalDriveStrings(DSLength,(LPTSTR)DStr); //通過GetLogicalDriveStrings將字符串信息復(fù)制到堆區(qū)數(shù)組中,其中保存了所有驅(qū)動(dòng)器的信息。 int DType; int si=0; BOOL fResult; unsigned _int64 i64FreeBytesToCaller; unsigned _int64 i64TotalBytes; unsigned _int64 i64FreeBytes; for(int i=0;i<DSLength/4;++i) //為了顯示每個(gè)驅(qū)動(dòng)器的狀態(tài),則通過循環(huán)輸出實(shí)現(xiàn),由于DStr內(nèi)部保存的數(shù)據(jù)是A:/NULLB:/NULLC:/NULL,這樣的信息,所以DSLength/4可以獲得具體大循環(huán)范圍 { char dir[3]={DStr[si],':','//'}; cout<<dir; DType = GetDriveType(DStr+i*4); //GetDriveType函數(shù),可以獲取驅(qū)動(dòng)器類型,參數(shù)為驅(qū)動(dòng)器的根目錄 if(DType == DRIVE_FIXED)
{ cout<<"硬盤"; } else if(DType == DRIVE_CDROM) { cout<<"光驅(qū)"; } else if(DType == DRIVE_REMOVABLE) { cout<<"可移動(dòng)式磁盤"; } else if(DType == DRIVE_REMOTE) { cout<<"網(wǎng)絡(luò)磁盤"; } else if(DType == DRIVE_RAMDISK) { cout<<"虛擬RAM磁盤"; } else if (DType == DRIVE_UNKNOWN) { cout<<"未知設(shè)備"; } fResult = GetDiskFreeSpaceEx ( dir, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes, (PULARGE_INTEGER)&i64FreeBytes); //GetDiskFreeSpaceEx函數(shù),可以獲取驅(qū)動(dòng)器磁盤的空間狀態(tài),函數(shù)返回的是個(gè)BOOL類型數(shù)據(jù) if(fResult)//通過返回的BOOL數(shù)據(jù)判定驅(qū)動(dòng)器是否在工作狀態(tài) {
cout<<" totalspace:"<<(float)i64TotalBytes/1024/1024<<" MB";//磁盤總?cè)萘? cout<<" freespace:"<<(float)i64FreeBytesToCaller/1024/1024<<" MB";//磁盤剩余空間 } else { cout<<" 設(shè)備未預(yù)備好"; } cout<<endl; si+=4; }

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 偏关县| 海伦市| 宝应县| 邢台县| 炎陵县| 乐陵市| 怀柔区| 华坪县| 商水县| 隆尧县| 靖安县| 定边县| 平山县| 镇赉县| 泰州市| 防城港市| 通辽市| 中山市| 进贤县| 浮梁县| 都江堰市| 靖西县| 佳木斯市| 枣强县| 芦山县| 辽阳市| 西乡县| 朝阳市| 吉隆县| 武川县| 池州市| 保康县| 榆中县| 新竹市| 曲沃县| 延长县| 陆川县| 和静县| 汤原县| 镇平县| 江陵县|