注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 32位开发 > C/C++ 内容正文:C++ 通过WIN32 API 获取逻辑磁盘详细信息

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

发布时间:2006-05-05 19:02:17 来源:网易学院 网友评论 0 条

众所周知,在微软的操作系统下编写应用程序,最主要的还是通过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
);

 

以下是完整的示例程序代码

//程序作者:管宁     
//站点:www.cndev-lab.com     
//所有稿件均有版权,如要转载,请务必注名出处和作者

#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;

          }

 

相关文章
    无相关信息
【评论】【收藏本文】【打印】【关闭】
上一篇文章:C++编写的ATM自动取款机模拟程序分析
下一篇文章:C++ STL编程轻松入门
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
推荐阅讯
  • Windows Sockets:带存档的套接字示例
  • Windows Sockets:字节排序
  • 浅议C++ 中的垃圾回收方法
  • MFC六大关键技术剖析之动态创建
  • 为C++程序添加文件保存加载功能
  • 纵横捭阖C++之从异步谈起
  • 给MSN Messager装个钩子
  • C++启蒙之C++中的类
  • Visual C++ 入门精解-引言
  • VC编程中如何操作数据库中的图像字段
阅读排行
  • 1.Borland 发布C++ Builder 2006 RAD 环境
  • 2.C/C++程序员应聘常见面试题深入剖析
  • 3.Visual C++常用数据类型转换详解
  • 4.C++中的 static 关键字
  • 5.利用VC++实现局域网实时视频传输
  • 6.浅谈C/C++内存泄漏及其检测工具
  • 7.英国投票否决C++/CLI 微软强攻ISO标准受挫
  • 8.VC++下用MSComm控件实现串口通讯
  • 9.伪随机数生成及在VC++中的实现
  • 10.VC++编程实现对波形数据的频谱分析
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载