| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> c/c++ >> C++通過WIN32 API獲取邏輯磁盤詳細信息
 

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

2008-06-01 02:06:53  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  衆所周知,在微軟的操作系統下編寫應用程序,最主要的還是通過windows所提供的api函數來實現各種操作的,這些函數通常是可以直接使用的,只要包含windows.h這個頭文件。

  今天我們主要介紹的是幾個常用的api函數,通過它我們可以獲取用戶磁盤的相關信息。

  示例程序:請點擊附件下載。

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


  其主要函數原型說明如下:

  1.獲取系統中邏輯驅動器的數量

  The GetLogicalDrives function retrieves a bitmask rePResenting the currently available disk drives.

  DWord GetLogicalDrives(void);

  2.獲取所有驅動器字符串信息

  The GetLogicalDriveStrings function fills a buffer with strings that specify valid drives in the system.

  DWORD GetLogicalDriveStrings(

   DWORD nBufferLength,

   LPTSTR lpBuffer

  );

  3.獲取驅動器類型

  The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.

  UINT GetDriveType(

   LPCTSTR lpRootPathName

  );

  4. 獲取驅動器磁盤的空間狀態,函數返回的是個BOOL類型數據

  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

  );

  以下是完整的示例程序代碼:

C++通過WIN32 API獲取邏輯磁盤詳細信息
更多內容請看C/C++技術專題專題,或

  #include <iostream>

  #include <windows.h>

  using namespace std;

  int main()

  {

   int DiskCount = 0;

   DWORD DiSKINfo = GetLogicalDrives();

   //利用GetLogicalDrives()函數可以獲取系統中邏輯驅動器的數量,函數返回的是一個32位無符號整型數據。

   while(DiskInfo)//通過循環操作查看每一位數據是否爲1,假如爲1則磁盤爲真,假如爲0則磁盤不存在。

   {

   if(DiskInfo&1)//通過位運算的邏輯與操作,判定是否爲1

   {

   ++DiskCount;

  

   }

   DiskInfo = DiskInfo >> 1;//通過位運算的右移操作保證每循環一次所檢查的位置向右移動一位。

   //DiskInfo = DiskInfo/2;

   }

   cout<<"邏輯磁盤數量:"<<DiskCount<<endl;

  //-------------------------------------------------------------------

   int DSLength = GetLogicalDriveStrings(0,NULL);

   //通過GetLogicalDriveStrings()函數獲取所有驅動器字符串信息長度。

   char* DStr = new char[DSLength];//用獲取的長度在堆區創建一個c風格的字符串數組

   GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);

   //通過GetLogicalDriveStrings將字符串信息複制到堆區數組中,其中保存了所有驅動器的信息。

   int DType;

   int si=0;

   BOOL fResult;

   unsigned _int64 i64FreeBytesToCaller;

   unsigned _int64 i64TotalBytes;

   unsigned _int64 i64FreeBytes;

   for(int i=0;i<DSLength/4;++i)

   //爲了顯示每個驅動器的狀態,則通過循環輸出實現,由于DStr內部保存的數據是A:\NULLB:\NULLC:\NULL,這樣的信息,所以DSLength/4可以獲得具體大循環範圍

   {

   char dir[3]={DStr[si],':','\\'};

   cout<<dir;

   DType = GetDriveType(DStr+i*4);

   //GetDriveType函數,可以獲取驅動器類型,參數爲驅動器的根目錄

   if(DType == DRIVE_FIXED)

   {

   cout<<"硬盤";

   }

   else if(DType == DRIVE_CDROM)

   {

   cout<<"光驅";

   }

   else if(DType == DRIVE_REMOVABLE)

   {

   cout<<"可移動式磁盤";

   }

   else if(DType == DRIVE_REMOTE)

   {

   cout<<"網絡磁盤";

   }

   else if(DType == DRIVE_RAMDISK)

   {

  

   cout<<"虛擬RAM磁盤";

   }

   else if (DType == DRIVE_UNKNOWN)

   {

   cout<<"未知設備";

   }

   fResult = GetDiskFreeSpaceEx (

   dir,

   (PULARGE_INTEGER)&i64FreeBytesToCaller,

   (PULARGE_INTEGER)&i64TotalBytes,

   (PULARGE_INTEGER)&i64FreeBytes);

   //GetDiskFreeSpaceEx函數,可以獲取驅動器磁盤的空間狀態,函數返回的是個BOOL類型數據

   if(fResult)//通過返回的BOOL數據判定驅動器是否在工作狀態

   {

   cout<<" totalspace:"<<(float)i64TotalBytes/1024/1024<<" MB";//磁盤總容量

   cout<<" freespace:"<<(float)i64FreeBytesToCaller/1024/1024<<" MB";//磁盤剩余空間

   }

   else

   {

   cout<<" 設備未預備好";

   }

   cout<<endl;

   si+=4;

   }

   system("pause");

  }

  WIN API函數作爲windows操作系統環境下編程的接口,在其它語言,例如VB VB.NET C# Delphi中使用的時候操作的方法也是差不多的,具體可以參考相關語言的書籍。
 
 
 
上一篇《C++設計模式之Singleton》
下一篇《C++中的虛函數(virtual function)(1)》
 
 
 
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

河南夫妻在溫嶺網絡直播“造人”內容涉黃被刑事拘留

夫妻網絡直播“造人”爆紅   1月9日,溫嶺城北派出所接到南京警方的協查通告,他們近期打掉了一個涉黃直播APP平台。而根據掌握的線索,其中有一對涉案的夫妻主播...

如何防止牆紙老化?牆紙變舊變黃怎麽辦?

如何防止牆紙老化? (1)選擇透氣性好的牆紙 市場上牆紙的材質分無紡布的、木纖維的、PVC的、玻璃纖維基材的、布面的等,相對而言,PVC材質的牆紙最不透氣...

鮮肌之謎非日本生産VS鮮肌之謎假日貨是謠言

觀點一:破日本銷售量的“鮮肌之謎” 非日本生産 近一段時間,淘寶上架了一款名爲“鮮肌之謎的” 鲑魚卵巢美容液,號稱是最近日本的一款推出的全新護膚品,産品本身所...

中國最美古詩詞精選摘抄

系腰裙(北宋詞人 張先) 惜霜蟾照夜雲天,朦胧影、畫勾闌。人情縱似長情月,算一年年。又能得、幾番圓。 欲寄西江題葉字,流不到、五亭前。東池始有荷新綠,尚小如...

關于女人的經典語句

關于女人的經典語句1、【做一個獨立的女人】 思想獨立:有主見、有自己的人生觀、價值觀。有上進心,永遠不放棄自己的理想,做一份自己喜愛的事業,擁有快樂和成就...

未來我們可以和性愛機器人結婚嗎?

你想體驗機器人性愛嗎?你想和性愛機器人結婚嗎?如果你想,機器人有拒絕你的權利嗎? 近日,第二屆“國際人類-機器人性愛研討會”大會在倫敦金史密斯大學落下帷幕。而...

全球最變態的十個地方

10.土耳其地下洞穴城市 變態指數:★★☆☆☆ 這是土耳其卡帕多西亞的一個著名景點,傳說是當年基督教徒們爲了躲避戰爭而在此修建。裏面曾住著20000人,...

科學家稱,人類死亡後意識將在另外一個宇宙中繼續存活

據英國《每日快報》報道,一位科學家兼理論家Robert Lanza博士宣稱,世界上並不存在人類死亡,死亡的只是身體。他認爲我們的意識借助我們體內的能量生存,而且...

《屏裏狐》片頭曲《我愛狐狸精》歌詞是什麽?

《我愛狐狸精》 - 劉馨棋   (電視劇《屏裏狐》主題曲)   作詞:金十三&李旦   作曲:劉嘉   狐狸精 狐狸仙   千年修...

 
 
 
衆所周知,在微軟的操作系統下編寫應用程序,最主要的還是通過windows所提供的api函數來實現各種操作的,這些函數通常是可以直接使用的,只要包含windows.h這個頭文件。   今天我們主要介紹的是幾個常用的api函數,通過它我們可以獲取用戶磁盤的相關信息。   示例程序:請點擊附件下載。 [url=/bbs/detail_1785384.html][img]http://image.wangchao.net.cn/it/1323423631038.gif[/img][/url]   其主要函數原型說明如下:   1.獲取系統中邏輯驅動器的數量 The GetLogicalDrives function retrieves a bitmask rePResenting the currently available disk drives. DWord GetLogicalDrives(void);   2.獲取所有驅動器字符串信息 The GetLogicalDriveStrings function fills a buffer with strings that specify valid drives in the system. DWORD GetLogicalDriveStrings( DWORD nBufferLength, LPTSTR lpBuffer );   3.獲取驅動器類型 The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive. UINT GetDriveType( LPCTSTR lpRootPathName );   4. 獲取驅動器磁盤的空間狀態,函數返回的是個BOOL類型數據 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 );   以下是完整的示例程序代碼: [url=/bbs/detail_1785384.html][img]http://image.wangchao.net.cn/it/1323423631421.gif[/img][/url] 更多內容請看C/C++技術專題專題,或 #include <iostream> #include <windows.h> using namespace std; int main() { int DiskCount = 0; DWORD DiSKINfo = GetLogicalDrives(); //利用GetLogicalDrives()函數可以獲取系統中邏輯驅動器的數量,函數返回的是一個32位無符號整型數據。 while(DiskInfo)//通過循環操作查看每一位數據是否爲1,假如爲1則磁盤爲真,假如爲0則磁盤不存在。 { if(DiskInfo&1)//通過位運算的邏輯與操作,判定是否爲1 { ++DiskCount; } DiskInfo = DiskInfo >> 1;//通過位運算的右移操作保證每循環一次所檢查的位置向右移動一位。 //DiskInfo = DiskInfo/2; } cout<<"邏輯磁盤數量:"<<DiskCount<<endl; //------------------------------------------------------------------- int DSLength = GetLogicalDriveStrings(0,NULL); //通過GetLogicalDriveStrings()函數獲取所有驅動器字符串信息長度。 char* DStr = new char[DSLength];//用獲取的長度在堆區創建一個c風格的字符串數組 GetLogicalDriveStrings(DSLength,(LPTSTR)DStr); //通過GetLogicalDriveStrings將字符串信息複制到堆區數組中,其中保存了所有驅動器的信息。 int DType; int si=0; BOOL fResult; unsigned _int64 i64FreeBytesToCaller; unsigned _int64 i64TotalBytes; unsigned _int64 i64FreeBytes; for(int i=0;i<DSLength/4;++i) //爲了顯示每個驅動器的狀態,則通過循環輸出實現,由于DStr內部保存的數據是A:\NULLB:\NULLC:\NULL,這樣的信息,所以DSLength/4可以獲得具體大循環範圍 { char dir[3]={DStr[si],':','\\'}; cout<<dir; DType = GetDriveType(DStr+i*4); //GetDriveType函數,可以獲取驅動器類型,參數爲驅動器的根目錄 if(DType == DRIVE_FIXED) { cout<<"硬盤"; } else if(DType == DRIVE_CDROM) { cout<<"光驅"; } else if(DType == DRIVE_REMOVABLE) { cout<<"可移動式磁盤"; } else if(DType == DRIVE_REMOTE) { cout<<"網絡磁盤"; } else if(DType == DRIVE_RAMDISK) { cout<<"虛擬RAM磁盤"; } else if (DType == DRIVE_UNKNOWN) { cout<<"未知設備"; } fResult = GetDiskFreeSpaceEx ( dir, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes, (PULARGE_INTEGER)&i64FreeBytes); //GetDiskFreeSpaceEx函數,可以獲取驅動器磁盤的空間狀態,函數返回的是個BOOL類型數據 if(fResult)//通過返回的BOOL數據判定驅動器是否在工作狀態 { cout<<" totalspace:"<<(float)i64TotalBytes/1024/1024<<" MB";//磁盤總容量 cout<<" freespace:"<<(float)i64FreeBytesToCaller/1024/1024<<" MB";//磁盤剩余空間 } else { cout<<" 設備未預備好"; } cout<<endl; si+=4; } system("pause"); }   WIN API函數作爲windows操作系統環境下編程的接口,在其它語言,例如VB VB.NET C# Delphi中使用的時候操作的方法也是差不多的,具體可以參考相關語言的書籍。
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
陽光靓麗的模特兒(8)
陽光靓麗的模特兒(7)
陽光靓麗的模特兒(6)
陽光靓麗的模特兒(5)
秋-印象
德慶盤龍峽 一
松江印象之三
雲之南(寬幅)
 
>>返回首頁<<
 
 
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有