用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

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则