王朝网络
分享
 
 
 

C++通过WIN32 API获取逻辑磁盘详细信息

王朝c/c++·作者佚名  2008-06-01
宽屏版  字体: |||超大  

众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件。

今天我们主要介绍的是几个常用的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中使用的时候操作的方法也是差不多的,具体可以参考相关语言的书籍。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有