2009-11-03 17 views
5

Chcę pobrać listę dysków stałych w systemie. Ale dyski twarde GetDrives C# s zawierają wtyczki USB do dysków twardych.C# getdrives ze stałym typem, ale bez dysków twardych USB?

Każdy pomysł, w jaki sposób mogę wykryć, że naprawiony dysk nie jest dyskiem twardym USB lub vica versa?

+0

Przepraszam, ale internet był wyłączony, sprawdź poniższy link ... –

Odpowiedz

3

użycie DriveType wykryć rodzaj napędu:

using System.IO; 

DriveInfo[] allDrives = DriveInfo.GetDrives(); 
foreach (DriveInfo d in allDrives) 
{ 
    if (d.IsReady && d.DriveType == DriveType.Fixed) 
    { 
    // This is the drive you want... 
    } 
} 

DriveInfo Class

Edit1:

sprawdzić poniższy link: How do I detected whether a hard drive is connected via USB?

+0

Ale DriveType.Removable to tylko USB Sticks a nie USB Harddisks. Z Docu: Dysk jest wymiennym urządzeniem pamięci masowej, takim jak stacja dyskietek lub napęd flash USB. – Ephraim

+0

Dysk twardy USB jest typu Naprawiono dokładnie to jest problem! – Ephraim

+0

Jest to możliwe. Możesz sprawdzić moje rozwiązanie na dole. – Parsa

4

Rozwiązanie ponacinane z How to get serial number of USB-Stick in C#:

//import the System.Management namespace at the top in your "using" statement. 
ManagementObjectSearch theSearcher = new ManagementObjectSearcher(
     "SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'"); 
+1

Prawidłowe, chociaż spowoduje to wyświetlenie Sticks and Drives, a szybkie przejrzenie właściwości nie ujawni łatwego sposobu znalezienia litery dysku. –

+0

Najwyraźniej efraim już je posiada. To rozwiązanie miało pokazać, jak odfiltrować napędy USB. Dlatego zapytanie zostało napisane jako "InterfaceType =" USB "i dlatego nie ma znaczenia, że ​​patyki są dołączone. – MSalters

+0

Nie ma możliwości dopasowania obiektów ManagementObjects i DriveInfo, ponieważ zapytanie nie zwraca liter dysków. – Wouter

1

Tutaj można uzyskać listę dysk twardy USB.

//Add Reference System.Management and use namespace at the top of the code. 
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'"); 

     foreach (ManagementObject queryObj in searcher.Get()) 
     { 
      foreach (ManagementObject b in queryObj.GetRelated("Win32_DiskPartition")) 
      { 
       foreach (ManagementBaseObject c in b.GetRelated("Win32_LogicalDisk")) 
       { 
        Console.WriteLine(String.Format("{0}" + "\\", c["Name"].ToString())); // here it will print USB drive letter 
       } 
      } 

     } 

Tutaj można uzyskać listę wszystkich stałych napędów (system i USB dysków twardych):

 DriveInfo[] allDrives = DriveInfo.GetDrives(); 

     foreach (DriveInfo d in allDrives) 
     { 
      if (d.IsReady == true && d.DriveType == DriveType.Fixed) 
      { 
       Console.WriteLine("Drive {0}", d.Name); 
       Console.WriteLine(" Drive type: {0}", d.DriveType); 
      }   
     } 

jeśli je porównać, a następnie można pobrać listę stałych dysków w systemie, ale bez Dyski twarde USB.