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

2016-02-19 20:52 51 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的C++通过WIN32 API获取逻辑磁盘详细信息,希望大家看完后能赶快学习起来。

【 tulaoshi.com - 编程语言 】

众所周知,在微软的操作系统下编写应用程序,最主要的还是通过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"逻辑磁盘数量:"DiskCountendl;
  //-------------------------------------------------------------------
  
  

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/) 

     int DSLength = GetLogicalDriveStrings(0,NULL);
       //通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度。
       char* DStr = new char[DSLength];//用获取的长度在堆区创建一个c风格的字符串数组
       GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);
       //通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。
  
  

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)  

   int DType;
       int si=0;
       BOOL fResult;
      unsigned _int64 i64FreeBytesToCaller;
      unsigned _int64 i64TotalBytes;
      unsigned _int64 i64FreeBytes;
  
  

 

     for(int i=0;iDSLength/4;++i)
       //为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:NULLB:NULLC:NULL,这样的信息,所以DSLength/4可以获得具体大循环范围
       {
           char dir[3]={DStr[si],':',''};
           coutdir;
           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" 设备未预备好";
           }
           coutendl;
           si+=4;
       }
  
       system("pause");
  }  WIN API函数作为windows操作系统环境下编程的接口,在其它语言,例如VB VB.NET C# Delphi中使用的时候操作的方法也是差不多的,具体可以参考相关语言的书籍。

来源:http://www.tulaoshi.com/n/20160219/1624741.html

延伸阅读
记得刚学C++的时候,喜欢研究API,当时同事有一个高手,写了段代码,我在写程序的时候,莫明妙的,机器突然关掉了!我正在纳闷的时候,我听到了他的奸笑! 原来是他干的,后来我研究了好久InitiateSystemShutdown这个API函数,了解被作弄的原理了,因为我的机器加入了Windows的域,而且域的超级用户我也设置成对我本机有Administrato...
腾讯电脑管家怎么查看进程详细信息   测速后,在窗体的下方会显示当前下载流量占用较大的TOP3应用程序。 此外,点击查看更多进程按钮,会跳转到流量监控页面,可以了解更为详尽的信息。
前言:本文书写的格式与其它不相同。本文题目说是关于C++ API的思考,其实也不仅仅是C++,对于其它语言同样适用。 API实际是指Application Programming Interface,应用程序编程接口。对API是一套用来控制Windows的各个部件的外观和行为的一套预先定义的Windows函数。在C++中我认为:一个API就是一堆类以及类中方法和字段的集合。 并不是所有的...
中午休息时,在FOX API(我常用的Win32 API浏览器)上发现了一个简单极好用的Win32API函数,是用来判断本地文件或远程机器文件是否存在的: 1. Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long 这是封装在Shell32.DLL系统文件里的一个函数,既可以判断本地文件是否存在...
标签: ASP
<% Class SWFDump Private header Private RECTdata Private nBits Private mversion Private mfilelen Private mxMin Private mxMax Private myMin Private myMax Private mheigt Private mwidth Private mframerate Private mframecount Private Sub Class_Initialize() End Sub Private Sub Class_Terminate() End Sub Private ...

经验教程

990

收藏

83
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部