2009-11-03 7 views
5

Je souhaite récupérer la liste des disques fixes dans un système. Mais les disques fixes GetDrives de C# s incluent des disques durs USB.C# getdrives avec type fixe mais sans disque dur USB?

Une idée de comment je peux détecter qu'un disque dur fixe n'est pas un disque dur USB ou vice versa?

+0

Désolé mais Internet était en panne, vérifiez le lien ci-dessous ... –

Répondre

3

utilisation DriveType pour détecter le type du lecteur:

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:

vérifier le lien suivant: How do I detected whether a hard drive is connected via USB?

+0

Mais DriveType.Removable ne sont que des clés USB et non des disques durs USB. À partir de Docu: Le lecteur est un périphérique de stockage amovible, tel qu'un lecteur de disquette ou un lecteur flash USB. – Ephraim

+0

Disques durs USB sont de type corrigé exactement c'est le problème! – Ephraim

+0

C'est possible. Vous pouvez vérifier ma solution en bas. – Parsa

4

Solution entaillé de 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

Correct, bien que cela listera les bâtons et les lecteurs, et un coup d'oeil rapide à travers les propriétés n'a pas révélé un moyen facile de trouver la lettre de lecteur. –

+0

Apparemment, Ephraïm a déjà ces. Cette solution était destinée à montrer comment filtrer les clés USB. C'est pourquoi la requête a été écrite comme 'InterfaceType = 'USB'', et pourquoi cela n'a pas d'importance que les bâtons soient inclus. – MSalters

+0

Il n'existe aucun moyen de faire correspondre les objets ManagementObjects et DriveInfo car la requête ne renvoie pas les lettres de lecteur. – Wouter

1

Ici vous pouvez obtenir la liste des disque dur 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 
       } 
      } 

     } 

Ici, vous pouvez obtenir la liste de tous les lecteurs fixes (système et disques durs USB):

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

Si vous les comparez, vous pouvez récupérer la liste des disques fixes dans un système, mais sans Disques durs USB.

Questions connexes