C#通过System.IO.DriveInfo.GetDrives或者ManagementClass ("Win32_LogicalDisk")方式获取到分区的总空间和可以用空间。但是存在一个问题,能获取的分区只有带盘符的分区。(例如:C: D:等等)。不带盘符的分区(如:Windows RE或者SYSTEM等),获取不到总空间和可用空间信息。请教各位牛牛们,想获取到不带盘符分区的总空间和可用空间信息,有啥好办法呀?
1条回答 默认 最新
- 单元测试是啥? 2023-07-14 15:29关注
在 C# 中,如果要获取不带盘符的分区(如 Windows RE 或 SYSTEM)的总空间和可用空间信息,可以使用 WMI (Windows Management Instrumentation) 来实现。通过查询 Win32_LogicalDisk 类的实例,可以获取到所有分区的信息,包括不带盘符的分区。
以下是一个示例代码,演示了如何使用 WMI 获取所有分区的总空间和可用空间信息:
using System; using System.Collections.Generic; using System.Management; public class DiskInfo { public string Name { get; set; } public ulong TotalSize { get; set; } public ulong FreeSpace { get; set; } } public class Program { public static void Main() { List<DiskInfo> disks = GetDiskInfo(); foreach (var disk in disks) { Console.WriteLine($"Name: {disk.Name}"); Console.WriteLine($"Total Size: {disk.TotalSize} bytes"); Console.WriteLine($"Free Space: {disk.FreeSpace} bytes"); Console.WriteLine(); } } public static List<DiskInfo> GetDiskInfo() { List<DiskInfo> disks = new List<DiskInfo>(); using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk")) { foreach (ManagementObject queryObj in searcher.Get()) { string name = queryObj["Name"].ToString(); if (string.IsNullOrEmpty(name)) // 过滤掉没有盘符的分区 continue; ulong totalSize = Convert.ToUInt64(queryObj["Size"]); ulong freeSpace = Convert.ToUInt64(queryObj["FreeSpace"]); DiskInfo disk = new DiskInfo { Name = name, TotalSize = totalSize, FreeSpace = freeSpace }; disks.Add(disk); } } return disks; } }
上述代码使用
ManagementObjectSearcher
执行查询语句 "SELECT * FROM Win32_LogicalDisk",并遍历结果集。通过判断分区的名称是否为空来过滤掉无盘符的分区。然后,读取总空间和可用空间的属性,并将这些信息保存到DiskInfo
对象中。希望这个方法能够帮助到你!如有任何疑问,请随时追问。
解决 1无用
悬赏问题
- ¥15 用verilog实现tanh函数和softplus函数
- ¥15 Hadoop集群部署启动Hadoop时碰到问题
- ¥15 求京东批量付款能替代天诚
- ¥15 slaris 系统断电后,重新开机后一直自动重启
- ¥15 QTableWidget重绘程序崩溃
- ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
- ¥15 关于vue2中methods使用call修改this指向的问题
- ¥15 idea自动补全键位冲突
- ¥15 请教一下写代码,代码好难
- ¥15 iis10中如何阻止别人网站重定向到我的网站