用C#和WMI获取逻辑驱动器详细信息(驱动器类型,文件系统,剩余空间等)

  • Post author:
  • Post category:其他

今天有同事问及获取逻辑分区相关信息,如:文件系统,剩余空间等的途径.余只在印象中记得调用WIN32 API可实现.但是似有不妥,于是乎稍查了一下资料,提供如下通过WMI(Windows Management Instrumentation – Windows 管理规范)来获取相关信息的方法.

 

WMI最初是内置在 Windows 2000、Windows  XP 和 Windows  Server 2003 系列操作系统中核心的管理支持技术,目前WMI 已经是一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的 Windows 资源例如磁盘、事件日志、文件、文件夹、文件系统、网络组件、操作系统设置、性能数据、打印机、进程、注册表设置、安全性、服务、共享、用户、组等等。怎么样,看出来了吧,此文只能算是抛个砖,WMI会给我们提供更多的帮助.

好了,看代码吧.

首先需要添加对于System.Management的引用.

System.Management.SelectQuery  selectQuery = new System.Management.SelectQuery(“select * from win32_logicaldisk”);
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
   int i=0;

   foreach (ManagementObject disk in searcher.Get())
   {
    string s = disk.GetText(TextFormat.WmiDtd20);
    //盘符
  listView1.Items.Add(disk[“Name”].ToString());
  //卷标
  try
  {
    this.listView1.Items[i].SubItems.Add(disk[“VolumeName”].ToString());
          }
  catch
  {
     this.listView1.Items[i].SubItems.Add(“设备未准备好”);
  }
   
  //驱动器类型
        string DriveType;
        try
        {
         DriveType = disk[“DriveType”].ToString();
         switch (DriveType)
         {
          case “0”:
           this.listView1.Items[i].SubItems.Add(“未知设备”);
           break;
          case “1”:
           this.listView1.Items[i].SubItems.Add(“未分区”);
           break;
          case “2”:
           this.listView1.Items[i].SubItems.Add(“可移动磁盘”);
           break;
          case “3”:
           this.listView1.Items[i].SubItems.Add(“硬盘”);
           break;
          case “4”:
           this.listView1.Items[i].SubItems.Add(“网络驱动器”);
           break;
          case “5”:
           this.listView1.Items[i].SubItems.Add(“光驱”);
           break;
          case “6”:
           this.listView1.Items[i].SubItems.Add(“内存磁盘”);
           break;
         }
        }
        catch
        {
         this.listView1.Items[i].SubItems.Add(“未知类型”);
        }
        //容量
        try
        {
         this.listView1.Items[i].SubItems.Add(GetSizeUseUnit(disk[“Size”].ToString()));
        }
        catch
        {
         this.listView1.Items[i].SubItems.Add(“设备未准备好”);
        }
        //剩余空间
        try
        {
         this.listView1.Items[i].SubItems.Add(GetSizeUseUnit(disk[“FreeSpace”].ToString()));
        }
        catch
        {
         this.listView1.Items[i].SubItems.Add(“设备未准备好”);
        }

        //文件系统
        this.listView1.Items[i].SubItems.Add(disk[“FileSystem”].ToString());
        i++;

    
   }

 

private string GetSizeUseUnit(string size)
  {
   double dSpace = Convert.ToDouble(size);
   string sSpace = dSpace.ToString(“N”);
   string[] tmp;
   string rtnSize = “0”;
   tmp = sSpace.Split(‘,’);
   switch (tmp.GetUpperBound(0))
   {
    case 0:
     rtnSize = tmp[0] + ” 字节”;
     break;
    case 1:
     rtnSize = tmp[0] + “.” + tmp[1].Substring(0,2) + ” K”;
     break;
    case 2:
     rtnSize = tmp[0] + “.” + tmp[1].Substring(0, 2) + ” M”;
     break;
    case 3:
     rtnSize = tmp[0] + “.” + tmp[1].Substring(0, 2) + ” G”;
     break;
    case 4:
     rtnSize = tmp[0] + “.” + tmp[1].Substring(0, 2) + ” T”;
     break;
   }
   return rtnSize;
  }
 } 

 

实现包含了两个方法,第二个方法只是格式化空间大小字符串的.

其中方法一中:SelectQuery selectQuery = new SelectQuery(“select * from win32_logicaldisk”);

看着查询语句很熟悉却又陌生吧,这个是WQL的查询. WQL就是WMI中的查询语言,WQL的全称是WMI Query Language,简称为WQL.有关WQL,详见:http://www.itjj.net/softtest/tools/20080527/298653.html

接下来看看FOREACH中枚举的disk,我们究竟能从它当中获取哪些信息呢?

我把相关的属性信息,贴出来,大家自己查看吧:

<INSTANCE CLASSNAME=”Win32_LogicalDisk”><QUALIFIER NAME=”dynamic” PROPAGATED=”true” TYPE=”boolean” TOSUBCLASS=”false” TOINSTANCE=”true”><VALUE>TRUE</VALUE></QUALIFIER><QUALIFIER NAME=”Locale” PROPAGATED=”true” TYPE=”sint32″ TOSUBCLASS=”false” TOINSTANCE=”true”><VALUE>1033</VALUE></QUALIFIER><QUALIFIER NAME=”provider” PROPAGATED=”true” TYPE=”string” TOSUBCLASS=”false” TOINSTANCE=”true”><VALUE>CIMWin32</VALUE></QUALIFIER><QUALIFIER NAME=”UUID” PROPAGATED=”true” TYPE=”string” TOSUBCLASS=”false” TOINSTANCE=”true”><VALUE>{8502C4B7-5FBB-11D2-AAC1-006008C78BC7}</VALUE></QUALIFIER><PROPERTY NAME=”__PATH” CLASSORIGIN=”___SYSTEM” TYPE=”string”><VALUE>SIMONErootcimv2:Win32_LogicalDisk.DeviceID=”C:”</VALUE></PROPERTY><PROPERTY NAME=”__NAMESPACE” CLASSORIGIN=”___SYSTEM” TYPE=”string”><VALUE>rootcimv2</VALUE></PROPERTY><PROPERTY NAME=”__SERVER” CLASSORIGIN=”___SYSTEM” TYPE=”string”><VALUE>SIMONE</VALUE></PROPERTY><PROPERTY.ARRAY NAME=”__DERIVATION” CLASSORIGIN=”___SYSTEM” TYPE=”string”><VALUE.ARRAY><VALUE>CIM_LogicalDisk</VALUE><VALUE>CIM_StorageExtent</VALUE><VALUE>CIM_LogicalDevice</VALUE><VALUE>CIM_LogicalElement</VALUE><VALUE>CIM_ManagedSystemElement</VALUE></VALUE.ARRAY></PROPERTY.ARRAY><PROPERTY NAME=”__PROPERTY_COUNT” CLASSORIGIN=”___SYSTEM” TYPE=”sint32″><VALUE>40</VALUE></PROPERTY><PROPERTY NAME=”__RELPATH” CLASSORIGIN=”___SYSTEM” TYPE=”string”><VALUE>Win32_LogicalDisk.DeviceID=”C:”</VALUE></PROPERTY><PROPERTY NAME=”__DYNASTY” CLASSORIGIN=”___SYSTEM” TYPE=”string”><VALUE>CIM_ManagedSystemElement</VALUE></PROPERTY><PROPERTY NAME=”__SUPERCLASS” CLASSORIGIN=”___SYSTEM” TYPE=”string”><VALUE>CIM_LogicalDisk</VALUE></PROPERTY><PROPERTY NAME=”__CLASS” CLASSORIGIN=”___SYSTEM” TYPE=”string”><VALUE>Win32_LogicalDisk</VALUE></PROPERTY><PROPERTY NAME=”__GENUS” CLASSORIGIN=”___SYSTEM” TYPE=”sint32″><VALUE>2</VALUE></PROPERTY><PROPERTY NAME=”Access” CLASSORIGIN=”CIM_StorageExtent” PROPAGATED=”true” TYPE=”uint16″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint16</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”Availability” CLASSORIGIN=”CIM_LogicalDevice” PROPAGATED=”true” TYPE=”uint16″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint16</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”BlockSize” CLASSORIGIN=”CIM_StorageExtent” PROPAGATED=”true” TYPE=”uint64″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint64</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”Caption” CLASSORIGIN=”CIM_ManagedSystemElement” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER><VALUE>C:</VALUE></PROPERTY><PROPERTY NAME=”Compressed” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”boolean”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>boolean</VALUE></QUALIFIER><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME=”ConfigManagerErrorCode” CLASSORIGIN=”CIM_LogicalDevice” PROPAGATED=”true” TYPE=”uint32″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint32</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”ConfigManagerUserConfig” CLASSORIGIN=”CIM_LogicalDevice” PROPAGATED=”true” TYPE=”boolean”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>boolean</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”CreationClassName” CLASSORIGIN=”CIM_LogicalDevice” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER><VALUE>Win32_LogicalDisk</VALUE></PROPERTY><PROPERTY NAME=”Description” CLASSORIGIN=”CIM_ManagedSystemElement” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER><VALUE>本地固定磁盘</VALUE></PROPERTY><PROPERTY NAME=”DeviceID” CLASSORIGIN=”CIM_LogicalDevice” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER><QUALIFIER NAME=”key” PROPAGATED=”true” TYPE=”boolean” OVERRIDABLE=”false” TOINSTANCE=”true”><VALUE>TRUE</VALUE></QUALIFIER><VALUE>C:</VALUE></PROPERTY><PROPERTY NAME=”DriveType” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”uint32″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint32</VALUE></QUALIFIER><VALUE>3</VALUE></PROPERTY><PROPERTY NAME=”ErrorCleared” CLASSORIGIN=”CIM_LogicalDevice” PROPAGATED=”true” TYPE=”boolean”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>boolean</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”ErrorDescription” CLASSORIGIN=”CIM_LogicalDevice” PROPAGATED=”true” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”ErrorMethodology” CLASSORIGIN=”CIM_StorageExtent” PROPAGATED=”true” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”FileSystem” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER><VALUE>NTFS</VALUE></PROPERTY><PROPERTY NAME=”FreeSpace” CLASSORIGIN=”CIM_LogicalDisk” TYPE=”uint64″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint64</VALUE></QUALIFIER><VALUE>5350322176</VALUE></PROPERTY><PROPERTY NAME=”InstallDate” CLASSORIGIN=”CIM_ManagedSystemElement” PROPAGATED=”true” TYPE=”datetime”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>datetime</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”LastErrorCode” CLASSORIGIN=”CIM_LogicalDevice” PROPAGATED=”true” TYPE=”uint32″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint32</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”MaximumComponentLength” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”uint32″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint32</VALUE></QUALIFIER><VALUE>255</VALUE></PROPERTY><PROPERTY NAME=”MediaType” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”uint32″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint32</VALUE></QUALIFIER><VALUE>12</VALUE></PROPERTY><PROPERTY NAME=”Name” CLASSORIGIN=”CIM_ManagedSystemElement” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER><VALUE>C:</VALUE></PROPERTY><PROPERTY NAME=”NumberOfBlocks” CLASSORIGIN=”CIM_StorageExtent” PROPAGATED=”true” TYPE=”uint64″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint64</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”PNPDeviceID” CLASSORIGIN=”CIM_LogicalDevice” PROPAGATED=”true” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER></PROPERTY><PROPERTY.ARRAY NAME=”PowerManagementCapabilities” CLASSORIGIN=”CIM_LogicalDevice” PROPAGATED=”true” TYPE=”uint16″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint16</VALUE></QUALIFIER></PROPERTY.ARRAY><PROPERTY NAME=”PowerManagementSupported” CLASSORIGIN=”CIM_LogicalDevice” PROPAGATED=”true” TYPE=”boolean”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>boolean</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”ProviderName” CLASSORIGIN=”Win32_LogicalDisk” PROPAGATED=”true” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”Purpose” CLASSORIGIN=”CIM_StorageExtent” PROPAGATED=”true” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”QuotasDisabled” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”boolean”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>boolean</VALUE></QUALIFIER><VALUE>TRUE</VALUE></PROPERTY><PROPERTY NAME=”QuotasIncomplete” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”boolean”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>boolean</VALUE></QUALIFIER><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME=”QuotasRebuilding” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”boolean”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>boolean</VALUE></QUALIFIER><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME=”Size” CLASSORIGIN=”CIM_LogicalDisk” TYPE=”uint64″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint64</VALUE></QUALIFIER><VALUE>36709388288</VALUE></PROPERTY><PROPERTY NAME=”Status” CLASSORIGIN=”CIM_ManagedSystemElement” PROPAGATED=”true” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”StatusInfo” CLASSORIGIN=”CIM_LogicalDevice” PROPAGATED=”true” TYPE=”uint16″><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>uint16</VALUE></QUALIFIER></PROPERTY><PROPERTY NAME=”SupportsDiskQuotas” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”boolean”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>boolean</VALUE></QUALIFIER><VALUE>TRUE</VALUE></PROPERTY><PROPERTY NAME=”SupportsFileBasedCompression” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”boolean”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>boolean</VALUE></QUALIFIER><VALUE>TRUE</VALUE></PROPERTY><PROPERTY NAME=”SystemCreationClassName” CLASSORIGIN=”CIM_LogicalDevice” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER><VALUE>Win32_ComputerSystem</VALUE></PROPERTY><PROPERTY NAME=”SystemName” CLASSORIGIN=”CIM_LogicalDevice” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER><VALUE>SIMONE</VALUE></PROPERTY><PROPERTY NAME=”VolumeDirty” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”boolean”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>boolean</VALUE></QUALIFIER><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME=”VolumeName” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER><VALUE>SYSTEM</VALUE></PROPERTY><PROPERTY NAME=”VolumeSerialNumber” CLASSORIGIN=”Win32_LogicalDisk” TYPE=”string”><QUALIFIER NAME=”CIMTYPE” PROPAGATED=”true” TYPE=”string” TOINSTANCE=”true”><VALUE>string</VALUE></QUALIFIER><VALUE>70F9CB88</VALUE></PROPERTY></INSTANCE>

 

比如我们要获取文件系统(FileSystem),我们看到property中有,所以通过disk[“FileSystem”]直接访问.

 

以上内容参阅了:http://www.cndownz.com/article/5/374/2007/37952.html 特此鸣谢


版权声明:本文为simonezhlx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。