2010-12-14 3 views

Antwort

2

Daumen hoch für Ardmans Antwort. Perfekt. Um eine kleine Änderung hinzuzufügen, möchte ich eine Modifikation hinzufügen, wo Sie den Typ des Laufwerks finden können. Es sollte Ihr Problem lösen.

Oder wenn Sie die Laufwerksnamen speziell erhalten möchten, können Sie dies auch tun. Bitte beachten Sie, dass dies Beispiele aus dem Internet waren, so dass die einzelnen Autoren den Kredit erhalten sollten. Was ich getan habe, ist ein komplettes Programm mit diesen Code-Schnipsel zu erstellen, so dass Sie es verstehen können.

[DllImport("kernel32.dll", CharSet = CharSet.Auto)] 
    static extern bool GetVolumeInformation(string Volume, StringBuilder VolumeName, uint VolumeNameSize,out uint SerialNumber, out uint SerialNumberLength, out uint flags,StringBuilder fs, uint fs_size); 

Schreiben Sie zuerst diese Funktion wie sie ist. Es verwendet die kernel32.dll, um die Laufwerksinformationen zu retreive. dann in der Hauptfunktion können Sie einfach diese Codes hinzufügen (Wenn es eine Konsolenanwendung ist oder wenn Sie eine GUI in geeigneter Weise zu tun haben.)

uint serialNum, serialNumLength, flags; 
     StringBuilder volumename = new StringBuilder(256); 
     StringBuilder fstype = new StringBuilder(256); 
     bool ok = false; 
     //Cursor.Current = Cursors.WaitCursor; 
     foreach (string drives in Environment.GetLogicalDrives()) 
     { 
      ok = GetVolumeInformation(drives, volumename, (uint)volumename.Capacity - 1, out serialNum, 
            out serialNumLength, out flags, fstype, (uint)fstype.Capacity - 1); 
      if (ok) 
      { 
       Console.WriteLine("\n Volume Information of " + drives + "\n"); 
       Console.WriteLine("\nSerialNumber of is..... " + serialNum.ToString() + " \n"); 
       if (volumename != null) 
       { 
        Console.WriteLine("VolumeName is..... " + volumename.ToString() + " \n"); 
       } 
       if (fstype != null) 
       { 
        Console.WriteLine("FileType is..... " + fstype.ToString() + " \n"); 
       } 
      } 
      ok = false; 
     } 

Ich denke, dies ist eine komplette Lösung für Sie sein sollte.

+1

Gibt es einen Weg den richtigen Namen des Gerätes zu kennen - Shira (G:) - (mein DOK), nicht nur G :? – Shira

+0

Ich habe meine Antwort hier bearbeitet. Überprüfen Sie bitte das. – JCTLK

2
DriveInfo[] mydrives = DriveInfo.GetDrives(); 

foreach (DriveInfo mydrive in mydrives) 
{ 
    Console.WriteLine("Drive: {0}", mydrive.Name); 
    Console.WriteLine("Type: {0}", mydrive.DriveType); 
} 

Dieser Code wird durch jedes Laufwerk durchlaufen, und Sie werden sehen, dass Ihr USB-Laufwerk (s) angezeigt wird. Die DriveType wird als Removable und nicht USB angezeigt, nur damit Sie wissen.

Weitere Informationen unter DriveType.

+2

Die Antriebe als „removable“ angezeigt wird, aber es wird nicht gesagt, was diejenigen, sind USB. – Gabe

+0

Dieser Code zeigt mir alle USB-Geräte und ihren Namen - aber kann ich wissen, einer von ihnen ist DOK für Ex.? – Shira

0

Oder Sie können so etwas tun (in meinem Beispiel aktualisiere ich die Laufwerksliste in eine Combobox):

drives = DriveInfo.GetDrives().Where(drive => drive.IsReady && drive.DriveType == DriveType.Removable).ToArray(); 

     if (drives.Length == 0) 
     { 
      drivesBox.Items.Add("No USB Stick found."); 
      formatButton.Enabled = false; 
     } 
     else 
     { 
      foreach (DriveInfo drive in drives) 
      { 
       drivesBox.Items.Add(drive.VolumeLabel + " (" + drive.Name + ")"); 
      } 
      formatButton.Enabled = true; 
     } 
Verwandte Themen