本文主要是介绍用C#和WMI获取逻辑驱动器详细信息(驱动器类型,文件系统,剩余空间等),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天有同事问及获取逻辑分区相关信息,如:文件系统,剩余空间等的途径.余只在印象中记得调用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");
这篇关于用C#和WMI获取逻辑驱动器详细信息(驱动器类型,文件系统,剩余空间等)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!