当前,我可以使用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_LogicalDiskWin32_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/

10-12 21:47