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

衆所周知,在微軟的操作系統下編寫應用程序,最主要的還是通過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++ 通過WIN32 API 獲取邏輯磁盤詳細信息
衆所周知,在微軟的操作系統下編寫應用程序,最主要的還是通過windows所提供的api函數來實現各種操作的,這些函數通常是可以直接使用的,只要包含windows.h這個頭文件, 下載源文件今天我們主要介紹的是幾個常用的ap...查看完整版>>C++ 通過WIN32 API 獲取邏輯磁盤詳細信息
 
VB.NET 獲取磁盤信息
磁盤信息實例說明在本程序中,我們將生成一個能夠得到當前磁盤信息的應用程序,跟右鍵點擊磁盤“屬性”得到的結果相似。運行後,選擇磁盤後,可以得到當前磁盤的序列號、卷標、文件類型、已用空間、未用空...查看完整版>>VB.NET 獲取磁盤信息
 
面向對象的Windows編程實戰(上)(使用C++和Win32 API)
寫這一篇文章的目的就是使用C++這個面向對象的語言,使用大家都很熟悉的Win32 API,在windows平台上開發Windows程序,這也是我很久以前就有的想法了.參考了一些外國網站我封裝了下面幾個類:class WinApp;class Window;一...查看完整版>>面向對象的Windows編程實戰(上)(使用C++和Win32 API)
 
VB中獲取邏輯磁盤的信息
我們在編程的時候有時會需要得到系統中邏輯磁盤的一些信息,如磁盤卷標、磁盤序列號、空間大小、剩余空間等,這些信息直接使用VB提供的函數顯然是無法得到的。但是,借助于VB對WINDOWS API函數的支持,使用GetVolume...查看完整版>>VB中獲取邏輯磁盤的信息
 
如何用dbms_rowid獲取rowid的詳細信息
我們知道,通過dbms_rowid包可以獲得Rowid中包含的詳細信息,在下文中,我們將通過一個定義自定義函數來介紹此package的使用方法: create or replace function get_rowid(l_rowid in varchar2)return varchar2isls_m...查看完整版>>如何用dbms_rowid獲取rowid的詳細信息
 
通過sql語句獲取數據庫的基本信息
(1) 查詢Oracle 的物理結構1.1. 查看數據文件SQL> select name from v$datafile;NAME---------------------------------------------/u05/dbf/PROD/system_01.dbf/u05/dbf/PROD/system_01.dbf (系統數據文件) ...查看完整版>>通過sql語句獲取數據庫的基本信息
 
通過sql語句獲取數據庫的基本信息
  (1) 查詢oracle 的物理結構  1.1. 查看數據文件  SQL select name from v$datafile;  NAME  ---------------------------------------------  /u05/dbf/PROD/system_01.dbf/u05/dbf/PROD/system_01.db...查看完整版>>通過sql語句獲取數據庫的基本信息
 
使用WMI獲取遠程機器操作系統的詳細信息
代碼主題部分的OperatingSystem類,是使用工具(Management (WMI) Extensions for Visual Studio .NET 2003 Server Explorer )生成的。using System;using System.Management; using System.ComponentModel;using S...查看完整版>>使用WMI獲取遠程機器操作系統的詳細信息
 
通過sql語句獲取數據庫的基本信息
您可以通過以下幾個sql 可以立即了解系統的狀況和數據庫的狀態(僅獻給習慣使用sql/plus的人 呵呵 )(1) 查詢oracle 的物理結構1.1. 查看數據文件SQL> select name from v$datafile;NAME-------------------------...查看完整版>>通過sql語句獲取數據庫的基本信息
 
 
回到王朝網路移動版首頁