2010-06-17 78 views
4

我試圖通過循環DriveInfo.GetDrives()結果來識別驅動器類型。
但是對於USB和軟盤我都得到相同的值DriveType.Removable如何區分USB和軟盤設備?

我該如何區分它們?

+3

來區分你想這樣做,爲什麼呢? – 2010-06-17 10:30:10

+4

你爲什麼需要這個?天真的嘗試可以檢查驅動器的大小。 – 2010-06-17 10:32:31

+0

我需要這個,因爲我的程序需要一個USB驅動器,並且我想驗證用戶輸入。檢查尺寸是不安全的,也可能有小容量的USB設備。謝謝, – 2010-06-17 10:34:59

回答

7

您可以使用WMI(Windows Management Instrumentation)獲取更多內容,而不僅僅是獲取DriveInfo類中的內容。在這種情況下,您可以獲得接口類型,這將是USB驅動器的「USB」。

示例代碼如下。您需要添加對System.Management的引用。

using System.Management; 

try 
{ 
    ManagementObjectSearcher searcher = 
     new ManagementObjectSearcher("root\\CIMV2", 
     "SELECT * FROM Win32_DiskDrive"); 

    foreach(ManagementObject queryObj in searcher.Get()) 
    { 
     foreach(ManagementObject o in queryObj.GetRelated("Win32_DiskPartition")) 
     { 
      foreach(ManagementBaseObject b in o.GetRelated("Win32_LogicalDisk")) 
      { 
       Debug.WriteLine(" #Name: {0}", b["Name"]); 
      } 
     } 
     // One of: USB, IDE 
     Debug.WriteLine("Interface: {0}", queryObj["InterfaceType"]); 
     Debug.WriteLine("--------------------------------------------"); 
    } 
} 
catch (ManagementException f) 
{ 
    Debug.WriteLine(f.StackTrace); 
} 

僅供參考,this MSDN page文檔的可訪問屬性的完整列表(因爲你不會對此提供自動)。

+5

我沒有理由在這裏爲遲到的答案道歉。這不是一個論壇,如果我沒有弄錯的話,鼓勵未經回答的necromancy問題。 – 2010-12-23 15:54:47

+1

死靈。優秀的詞用法! – Amy 2010-12-23 16:15:17

+0

乾淨的例子! – 2013-01-02 15:58:39

0

光驅和軟驅還沒有準備好,所以你可以試試這個:

foreach (var dr in DriveInfo.GetDrives()) 
{ 
    if (dr.IsReady == true) 
    { 
     Console.WriteLine(string.Format("name : {0} type : {1}", dr, dr.DriveType)); 
    } 
} 

這是簡單的方法USB和軟盤設備