2009-11-03 5 views
5

Ich möchte die Liste der Festplatten in einem System abrufen. Aber GetDrives Fixed Drives von C# enthalten Plug-USB-Festplatten.C# getdrives mit Typ fest, aber ohne USB-Festplatten?

Irgendeine Idee, wie ich feststellen kann, dass ein festgelegtes Laufwerk keine USB-Festplatte ist oder umgekehrt?

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:

Prüfung die folgende Verbindung:

+0

Entschuldigung, aber das Internet war down, überprüfen Sie den folgenden Link ... –

Antwort

3

Verwendung Drivetype, die Art des Antriebs zu erfassen How do I detected whether a hard drive is connected via USB?

+0

Aber DriveType.Removable sind nur USB-Sticks nicht USB-Festplatten. Von Docu: Das Laufwerk ist ein Wechselspeichergerät, z. B. ein Diskettenlaufwerk oder ein USB-Flash-Laufwerk. – Ephraim

+0

USB-Festplatten sind vom Typ Fixed genau das ist das Problem! – Ephraim

+0

Es ist möglich. Sie können meine Lösung unten überprüfen. – Parsa

4

Lösung von How to get serial number of USB-Stick in C# eingekerbt:

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

Korrekt, obwohl dies Sticks und Laufwerke auflistet, und ein kurzer Blick durch die Eigenschaften ergab keinen einfachen Weg, den Laufwerksbuchstaben zu finden. –

+0

Offenbar hat Ephraim diese schon. Diese Lösung sollte zeigen, wie Sie USB-Laufwerke herausfiltern. Deshalb wurde die Abfrage als 'InterfaceType = 'USB' geschrieben, und es spielt keine Rolle, dass Sticks enthalten sind. – MSalters

+0

Es gibt keine Möglichkeit, die Objekte ManagementObjects und DriveInfo abzugleichen, da die Abfrage keine Laufwerksbuchstaben zurückgibt. – Wouter

1

Hier können Sie die Liste USB-Festplatte bekommen.

//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 
       } 
      } 

     } 

Hier können Sie die Liste aller festen Laufwerke (System und USB-Festplatten) erhalten:

 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); 
      }   
     } 

Wenn man sie vergleichen, dann können Sie die Liste der Festplatten in einem System abrufen, aber ohne USB-Festplatten.

Verwandte Themen