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

本文介绍如何通过C#和WMI(Windows Management Instrumentation)来获取逻辑驱动器的详细信息,包括文件系统、剩余空间、驱动器类型等。示例代码展示了如何遍历和显示这些信息,如驱动器类型、容量和可用空间。此外,还提到了WMI在Windows管理中的广泛用途。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值