C#通过串行ID获取驱动器的名称

问题描述:

我正在使用C#并在Visual Studio 2015上工作。 我需要从串行ID获取连接的USB驱动器的名称。 我尝试使用WMI类查询: “SELECT * FROM的Win32_LogicalDisk”C#通过串行ID获取驱动器的名称

ManagementObjectSearcher searcher = new 
      ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk"); 

     foreach (ManagementObject item in searcher.Get()) 
     { 
      if (item != null && item["VolumeSerialNumber"] != null && item["VolumeName"] != null) 
      { 
       if (item["VolumeSerialNumber"].ToString() == "50D76BF4") 
       { 
        Console.WriteLine($"{item["VolumeName"]} Is Connected and It's Letter is {item["Name"]}"); 
       } 
      }   
     }  

然而,有VolumeSerialNumber是不是真正的疗法系列ID。磁盘格式化后更改。

好吧我想通了。

我写了一个方法,重新获得一个硬盘的名称和来自它的信真实和不可更改的 ID。

您需要refernce System.Management

这是代码:

public static string GetDriveLetterAndLabelFromID(string id) 
    { 
     ManagementClass devs = new ManagementClass(@"Win32_Diskdrive"); 
     { 
      ManagementObjectCollection moc = devs.GetInstances(); 
      foreach (ManagementObject mo in moc) 
      { 
       string a = (string)mo["SerialNumber"]; 
       if (a== id) 
       { 
        foreach (ManagementObject b in 
        mo.GetRelated("Win32_DiskPartition")) 
        { 
         foreach (ManagementBaseObject c in b.GetRelated("Win32_LogicalDisk")) 
        { 
         string result = $"HardDrive Name: {c["VolumeName"].ToString()}\nHardDrive Letter: {c["DeviceID"]}";       
         return result; 
        } 
        } 
       } 
      } 
     } 
     return null; 
    }