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

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 05:02:05
字體:
來源:轉載
供稿:網友
眾所周知,在微軟的操作系統下編寫應用程序,最主要的還是通過windows所提供的api函數來實現各種操作的,這些函數通常是可以直接使用的,只要包含windows.h這個頭文件?! 〗裉煳覀冎饕榻B的是幾個常用的api函數,通過它我們可以獲取用戶磁盤的相關信息?! ∈纠绦颍赫堻c擊附件下載。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/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中使用的時候操作的方法也是差不多的,具體可以參考相關語言的書籍。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新沂市| 南木林县| 庆元县| 轮台县| 苗栗县| 咸丰县| 白山市| 鹤山市| 且末县| 镇安县| 广灵县| 舟曲县| 大关县| 武平县| 交城县| 山东省| 布尔津县| 贵南县| 定陶县| 当雄县| 乌海市| 佳木斯市| 施甸县| 松溪县| 金沙县| 门头沟区| 龙岩市| 吴川市| 绍兴市| 大渡口区| 双牌县| 广丰县| 阿坝| 恩平市| 台北市| 新泰市| 从江县| 吐鲁番市| 宁津县| 石门县| 偃师市|