| 订阅 | 在线投稿
分享
 
 
当前位置: 王朝网络 >> c/c++ >> C++通过WIN32 API获取逻辑磁盘详细信息 C++ tong guo WIN32 API huo qu luo ji ci pan xiang xi xin xi
 

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

2008-06-01 02:06:53 编辑來源:互联网 繁體版 评论
 
 
本文为【C++通过WIN32 API获取逻辑磁盘详细信息】的汉字拼音对照版显示拼音
  zhongsuozhouzhizaiweiruandecaozuoxitongxiabianxieyingyongchengxuzuizhuyaodehuanshitongguowindowssuotigongdeapihanshulaishixiangezhongcaozuodezhexiehanshutongchangshikeyizhijie使shiyongdezhiyaobaohanwindows.hzhegetouwenjian

  jintianwomenzhuyaojieshaodeshijigechangyongdeapihanshutongguotawomenkeyihuoquyonghucipandexiangguanxinxi

  shilichengxuqingdianjifujianxiazai

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


  qizhuyaohanshuyuanxingshuomingruxia

  1.huoquxitongzhongluojiqudongqideshuliang

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

  DWord GetLogicalDrives(void);

  2.huoqusuoyouqudongqizifuchuanxinxi

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

  DWORD GetLogicalDriveStrings(

   DWORD nBufferLength,

   LPTSTR lpBuffer

  );

  3.huoququdongqileixing

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

  UINT GetDriveType(

   LPCTSTR lpRootPathName

  );

  4. huoququdongqicipandekongjianzhuangtai,hanshufanhuideshigeBOOLleixingshuju

  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

  );

  yixiashiwanzhengdeshilichengxudaima

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

  #include <iostream>

  #include <windows.h>

  using namespace std;

  int main()

  {

   int DiskCount = 0;

   DWORD DiSKINfo = GetLogicalDrives();

   //liyongGetLogicalDrives()hanshukeyihuoquxitongzhongluojiqudongqideshulianghanshufanhuideshiyige32weiwufuhaozhengxingshuju

   while(DiskInfo)//tongguoxunhuancaozuochakanmeiyiweishujushifouwei1jiaruwei1zecipanweizhen,jiaruwei0zecipanbucunzai

   {

   if(DiskInfo&1)//tongguoweiyunsuandeluojiyucaozuopandingshifouwei1

   {

   ++DiskCount;

  

   }

   DiskInfo = DiskInfo >> 1;//tongguoweiyunsuandeyouyicaozuobaozhengmeixunhuanyicisuojianchadeweizhixiangyouyidongyiwei

   //DiskInfo = DiskInfo/2;

   }

   cout<<"luojicipanshuliang:"<<DiskCount<<endl;

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

   int DSLength = GetLogicalDriveStrings(0,NULL);

   //tongguoGetLogicalDriveStrings()hanshuhuoqusuoyouqudongqizifuchuanxinxichangdu

   char* DStr = new char[DSLength];//yonghuoqudechangduzaiduiquchuangjianyigecfenggedezifuchuanshuzu

   GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);

   //tongguoGetLogicalDriveStringsjiangzifuchuanxinxifuzhidaoduiqushuzuzhong,qizhongbaocunlesuoyouqudongqidexinxi

   int DType;

   int si=0;

   BOOL fResult;

   unsigned _int64 i64FreeBytesToCaller;

   unsigned _int64 i64TotalBytes;

   unsigned _int64 i64FreeBytes;

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

   //weilexianshimeigequdongqidezhuangtaizetongguoxunhuanshuchushixianyouyuDStrneibubaocundeshujushiA:\NULLB:\NULLC:\NULLzheyangdexinxisuoyiDSLength/4keyihuodejutidaxunhuanfanwei

   {

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

   cout<<dir;

   DType = GetDriveType(DStr+i*4);

   //GetDriveTypehanshukeyihuoququdongqileixingshenshuweiqudongqidegenmulu

   if(DType == DRIVE_FIXED)

   {

   cout<<"yingpan";

   }

   else if(DType == DRIVE_CDROM)

   {

   cout<<"guangqu";

   }

   else if(DType == DRIVE_REMOVABLE)

   {

   cout<<"keyidongshicipan";

   }

   else if(DType == DRIVE_REMOTE)

   {

   cout<<"wangluocipan";

   }

   else if(DType == DRIVE_RAMDISK)

   {

  

   cout<<"xuniRAMcipan";

   }

   else if (DType == DRIVE_UNKNOWN)

   {

   cout<<"weizhishebei";

   }

   fResult = GetDiskFreeSpaceEx (

   dir,

   (PULARGE_INTEGER)&i64FreeBytesToCaller,

   (PULARGE_INTEGER)&i64TotalBytes,

   (PULARGE_INTEGER)&i64FreeBytes);

   //GetDiskFreeSpaceExhanshukeyihuoququdongqicipandekongjianzhuangtai,hanshufanhuideshigeBOOLleixingshuju

   if(fResult)//tongguofanhuideBOOLshujupandingqudongqishifouzaigongzuozhuangtai

   {

   cout<<" totalspace:"<<(float)i64TotalBytes/1024/1024<<" MB";//cipanzongrongliang

   cout<<" freespace:"<<(float)i64FreeBytesToCaller/1024/1024<<" MB";//cipanshengyukongjian

   }

   else

   {

   cout<<" shebeiweiyubeihao";

   }

   cout<<endl;

   si+=4;

   }

   system("pause");

  }

  WIN APIhanshuzuoweiwindowscaozuoxitonghuanjingxiabianchengdejiekouzaiqitayuyanliruVB VB.NET C# Delphizhong使shiyongdeshihoucaozuodefangfayeshichabuduodejutikeyishenkaoxiangguanyuyandeshuji原文】【拼音
 
 
 
上一篇《C++设计模式之Singleton》
下一篇《C++中的虚函数(virtual function)(1)》
 
 
 
 
 
 
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

如何磨出破洞牛仔裤?牛仔裤怎么剪破洞?

把牛仔裤磨出有线的破洞 1、具体工具就是磨脚石,下面垫一个硬物,然后用磨脚石一直磨一直磨,到把那块磨薄了,用手撕开就好了。出来的洞啊很自然的。需要猫须的话调几...

我就是扫描下图得到了敬业福和爱国福

先来看下敬业福和爱国福 今年春节,支付宝再次推出了“五福红包”活动,表示要“把欠大家的敬业福都还给大家”。 今天该活动正式启动,和去年一样,需要收集“五福”...

冰箱异味产生的原因和臭味去除的方法

有时候我们打开冰箱就会闻到一股异味,冰箱里的这种异味是因为一些物质发出的气味的混合体,闻起来让人恶心。 产生这些异味的主要原因有以下几点。 1、很多人有这种习...

 
 
众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件。   今天我们主要介绍的是几个常用的api函数,通过它我们可以获取用户磁盘的相关信息。   示例程序:请点击附件下载。 [url=http://www.wangchao.net.cn/bbs/hydetail_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=http://www.wangchao.net.cn/bbs/hydetail_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中使用的时候操作的方法也是差不多的,具体可以参考相关语言的书籍。
󰈣󰈤
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
桌球宝贝_性感在蔓延(3)
桌球宝贝_性感在蔓延(2)
银杏树下清纯女孩(9)
银杏树下清纯女孩(8)
痞子的甘南日记
疑是银河落九天
雪域坝上四——纯美色
冬日恋歌——西城杨柳弄轻柔
 
>>返回首页<<
 
 
 为你推荐
 
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 热帖排行
 
 
 
 
©2005- 王朝网络 版权所有