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

本文主要是介绍用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获取逻辑驱动器详细信息(驱动器类型,文件系统,剩余空间等)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/503154

相关文章

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过