当前,我可以使用DriveInfo.GetDrives()在c#中获取所有驱动器及其标签。然后,我可以通过这种方法获得磁盘索引/分区索引。
var searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_DiskPartition");
foreach (var queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_DiskPartition instance");
Console.WriteLine("Name:{0}", (string)queryObj["Name"]);
Console.WriteLine("Index:{0}", (uint)queryObj["Index"]);
Console.WriteLine("DiskIndex:{0}", (uint)queryObj["DiskIndex"]);
Console.WriteLine("BootPartition:{0}", (bool)queryObj["BootPartition"]);
}
问题是DiskIndex,Name和Index基本上只是数字而不是Volume Label,即C:\,D:\等。
那么,最重要的是,如何使DiskIndex的Name Proprty on the DriveInfo的卷标呢?使用这种方法或更好的方法都可以。
(以下为:Tell if a Drive is a partition or a separate HDD)
编辑:
我确实找到了Win32_LogicalDisk然后是Win32_LogicalDiskToPartition的管理查询。 LogicalDisk具有卷,而LogicalDisktoParition提供映射。但是,我似乎无法弄清楚如何获取地图。我试图寻找一个JOIN并选择值,但是在不进行大量C#代码循环的情况下,找不到有关如何进行联接的任何信息。
最佳答案
您需要使用Win32_LogicalDisk类。
编辑:您是正确的Win32_LogicalDiskToPartition。是Win32_LogicalDisk和Win32_DiskPartition之间的链接。在Win32_LogicalDiskToPartition类上,这两个属性显示链接,
PS> Get-WmiObject-类Win32_LogicalDiskToPartition
前提:\\ computer \ root \ cimv2:Win32_DiskPartition.DeviceID =“磁盘#0,分区#1”
从属文件:\\ computer \ root \ cimv2:Win32_LogicalDisk.DeviceID =“ D:”
只需解析这两个属性并适当过滤其他类。
关于c# - 将DiskIndex映射到卷标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9130658/