2017-05-26 93 views
0

我正在使用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。磁盤格式化後更改。

回答

1

好吧我想通了。

我寫了一個方法,重新獲得一個硬盤的名稱和來自它的信真實和不可更改的 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; 
    }