2010-06-17 1 views
4

DriveInfo.GetDrives() 결과를 반복하여 드라이브 유형을 인식하려고합니다.
하지만 USB와 플로피 모두에 대해 동일한 DriveType.Removable 값을 얻습니다.USB와 플로피 장치를 구별하는 방법은 무엇입니까?

어떻게 구분할 수 있습니까?

+3

구분하는 쉬운 방법이 왜 그렇게 하시겠습니까? –

+4

왜 이것을 필요로합니까? 순진한 시도는 드라이브의 크기를 줄일 수 있습니다. –

+0

내 프로그램이 USB 드라이브를 기대하고 사용자 입력의 유효성을 검사하기 때문에 필자가 필요합니다. 작은 크기의 USB 장치도 있을지도 모릅니다. 고마워, –

답변

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

나는 늦은 대답에 대해 사과 할 이유가 없다. 이것은 포럼이 아니며, 내가 착각하지 않는다면 대답 할 수없는 질문을 격려합니다. –

+1

Necromancy. 우수한 단어 사용법! – Amy

+0

좋은 예! –

0

는 CD 드라이브와 플로피 드라이브는 당신이 시도 할 수 있도록 준비가되지 않습니다 :

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

이 USB 플로피 장치