今天有同事问及获取逻辑分区相关信息,如:文件系统,剩余空间等的途径.余只在印象中记得调用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 特此鸣谢