2009-11-03 11 views
5

Voglio recuperare l'elenco dei dischi fissi in un sistema. Ma le unità fisse GetDrives di C# s includono i dischi rigidi USB plug.Getdrive C# con tipo fisso ma senza harddisk USB?

Qualche idea su come posso rilevare che un'unità fissa non è un disco rigido USB o viceversa?

+0

scusate ma internet non funzionava, controllare il link sottostante ... –

risposta

3

uso DriveType per rilevare il tipo di azionamento:

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:

controllo seguente link: How do I detected whether a hard drive is connected via USB?

+0

Ma DriveType.Removable sono solo chiavette USB e dischi rigidi USB. Da Docu: l'unità è una periferica di archiviazione rimovibile, ad esempio un'unità disco floppy o un'unità flash USB. – Ephraim

+0

I dischi rigidi USB sono di tipo corretto, esattamente questo è il problema! – Ephraim

+0

È possibile. Puoi controllare la mia soluzione in fondo. – Parsa

4

Soluzione intaccato da 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

Corretto, sebbene questo elencherà Sticks and Drives e una rapida panoramica delle proprietà non ha rivelato un modo semplice per trovare la lettera di Drive. –

+0

Apparentemente ephraim ha già quelli. Questa soluzione aveva lo scopo di mostrare come filtrare le unità USB. Ecco perché la query è stata scritta come 'InterfaceType = 'USB'', e perché non importa che i bastoncini siano inclusi. – MSalters

+0

Non esiste alcun modo per far corrispondere gli oggetti ManagementObjects e DriveInfo perché la query non restituisce le lettere di unità. – Wouter

1

Qui è possibile ottenere l'elenco degli hard disk 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 
       } 
      } 

     } 

Qui è possibile ottenere l'elenco di tutte le unità fisse (Sistema e USB dischi rigidi):

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

Se li si confronta, quindi è possibile recuperare l'elenco dei dischi fissi in un sistema, ma senza Hard disk USB.

Problemi correlati