C#获取逻辑硬盘更多信息方法谈

开发 后端
若仅简单实现C#获取逻辑驱动器的名称列表我们使用.Net框架的Environment.GetLogicalDrives即可,但是若想获得更多关于磁盘驱动器的信息我们可以使用.Net框架下的System.Management命名空间。

C#获取更多逻辑硬盘信息的过程,主要是利用Visual Studio 2005建立一个WinForm工程,并拖放相关控件。

1、概述

若仅简单实现C#获取逻辑驱动器的名称列表我们使用.NET框架的Environment.GetLogicalDrives即可,但是若想获得更多关于磁盘驱动器的信息我们可以使用.NET框架下的System.Management命名空间所提供的类和委托等对大量管理信息和管理事件的集合进行访问(见http://www.iwebtrados.com.cn/post/111.html),这些信息和事件都与WMI有关,该命名空间下的类实际上也是对WMI的一种封装,应用程序和服务可以使用从ManagementObjectSearcher和ManagementQuery派生的类,查询感兴趣的管理信息,例如在磁盘上还剩多少可用空间、当前CPU利用率是多少、某一应用程序正连接到哪一数据库等等。下面,我将详细阐述如何利用WMI获取逻辑硬盘详细信息。

2、C#获取更多逻辑硬盘信息实现过程

(1)首先用Visual Studio 2005新建一个C#的Winform工程,在form1窗体上拖放一个listview控件以及一个button控件,都采用默认命名,设置listview的view属性为detail,添加5个列名称分别为“名称”,“类型”,“总大小”,“可用空间”,“序列号”。

(2)引入System.Management,具体见http://www.iwebtrados.com.cn/post/102.html

(3)在button_click事件中键入如下代码

  1. Code  
  2. privatevoidbutton1_Click(objectsender,EventArgse)  
  3. {  
  4. SelectQuerysq=newSelectQuery("select*fromwin32_logicaldisk");  
  5. System.Management.ManagementObjectSearchermos=newManagementObjectSearcher(sq);  
  6. //  
  7. this.listView1.Items.Clear();  
  8. foreach(System.Management.ManagementObjectdiskinmos.Get())  
  9. {  
  10. ListViewItemitem=listView1.Items.Add(disk["Name"].ToString());  
  11. //Name表示设备的名称  
  12. //各属性的标识见联机的MSDN里,Win32andCOMDevelopment下的WMI。  
  13. //如http://msdn.microsoft.com/en-us/library/aa394173(VS.85).aspx  
  14. try 
  15. {  
  16. stringstrType=disk["DriveType"].ToString();  
  17. switch(strType)//类型  
  18. {  
  19. case"0":  
  20. item.SubItems.Add("未知设备");  
  21. break;  
  22. case"1":  
  23. item.SubItems.Add("未分区");  
  24. break;  
  25. case"2":  
  26. item.SubItems.Add("可移动磁盘");  
  27. break;  
  28. case"3":  
  29. item.SubItems.Add("硬盘");  
  30. break;  
  31. case"4":  
  32. item.SubItems.Add("网络驱动器");  
  33. break;  
  34. case"5":  
  35. item.SubItems.Add("光驱");  
  36. break;  
  37. case"6":  
  38. item.SubItems.Add("内存磁盘");  
  39. break;  
  40. }  
  41. }  
  42. catch 
  43. {  
  44. item.SubItems.Add("设备未准备好");  
  45. }  
  46. try 
  47. {  
  48. item.SubItems.Add(GetSizeUseUnit(disk["Size"].ToString()));  
  49. //未用GetSizeUseUnit函数处理的Size属性以字节为单位  
  50. }  
  51. catch 
  52. {  
  53. }  
  54. try//可移动设备如光驱在未插入光盘时处于不可用状态,需要捕捉异常。  
  55. {  
  56. item.SubItems.Add(GetSizeUseUnit(disk["FreeSpace"].ToString()));  
  57. }  
  58. catch 
  59. {  
  60. }  
  61. try 
  62. {  
  63. item.SubItems.Add(disk["VolumeSerialNumber"].ToString());  
  64. }  
  65. catch 
  66. {  
  67. }  
  68. }  
  69. }  
  70.  
  71. //处理大小的函数 

Code  

  1. privatestringGetSizeUseUnit(stringsize)  
  2. {  
  3. doubledSpace=Convert.ToDouble(size);  
  4. stringsSpace=dSpace.ToString("N");  
  5. string[]tmp;  
  6. stringrtnSize="0";  
  7. tmp=sSpace.Split(',');  
  8. switch(tmp.GetUpperBound(0))  
  9. {  
  10. case0:  
  11. rtnSize=tmp[0]+"字节";  
  12. break;  
  13. case1:  
  14. rtnSize=tmp[0]+"."+tmp[1].Substring(0,2)+"K";  
  15. break;  
  16. case2:  
  17. rtnSize=tmp[0]+"."+tmp[1].Substring(0,2)+"M";  
  18. break;  
  19. case3:  
  20. rtnSize=tmp[0]+"."+tmp[1].Substring(0,2)+"G";  
  21. break;  
  22. case4:  
  23. rtnSize=tmp[0]+"."+tmp[1].Substring(0,2)+"T";  
  24. break;  
  25. }  
  26. returnrtnSize;  

3、C#获取更多逻辑硬盘信息运行效果

这样我们通过托管版本的WMI就轻松获得逻辑磁盘的相关信息。除了逻辑磁盘,我们通过WMI还可轻松获得CPU,网卡等设备的信息。本代码在WindowsXP SP2+Visual Studio 2005下编译和调试通过。

本文来自网络小筑博客园文章《c#获取逻辑硬盘信息

【编辑推荐】

  1. C#编写数字转换中文算法
  2. 分析C#调用COM对象
  3. C# SingleInstance类浅析
  4. 概述C#调用Active组件
  5. C# Convert.ToInt32简介
责任编辑:彭凡 来源: 博客园
相关推荐

2009-08-25 11:13:28

C#获取逻辑硬盘信息

2009-09-08 16:22:27

c# listBox

2009-09-08 15:28:24

C#委托

2009-08-21 17:24:18

C#控制摄像头

2009-08-17 15:52:42

C#多态

2009-08-26 09:50:08

C# GreetPeo

2009-08-26 17:16:22

C# CheckSta

2009-08-17 17:40:53

C# GetAllCu

2009-08-31 16:01:28

C#水晶报表数据获取方

2024-09-23 12:10:00

C#MAC代码

2009-08-12 14:23:09

C#逻辑运算符

2009-08-25 16:24:44

C#信息架构视图

2011-06-09 09:08:00

C#循环结构

2009-08-07 17:38:08

C#无词尾符号

2009-08-21 17:55:14

C#获取摄像头

2009-08-25 16:16:43

C# oledbcon

2009-08-14 10:59:35

C#分部方法

2009-08-31 16:33:28

C#调用Dispose

2009-09-11 09:15:06

C# get方法

2009-09-07 10:37:32

C#执行Finaliz
点赞
收藏

51CTO技术栈公众号