2016-06-05 10 views
0

Ist es möglich, alle Laufwerke zu erhalten? Zum Beispiel sind die Netzwerklaufwerke wegen fehlender Authentifizierung nicht verbunden.DriveInfo.GetDrives zeigen nicht verbundene Netzlaufwerke

Ich sehe in meinem Explorer, z. der Buchstabe Z mit einem roten Kreuz. Diese Verbindung wird ohne Authentifizierung gespeichert, aber dieser Code gibt mir diesen Buchstaben nicht.

System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives(); 

Und: Wie kann ich einen Listener für den Anschluss eines USB-Laufwerk anmelden?

+3

Bitte stellen Sie eine Frage per Post. Ich habe die zweite Frage "Wie höre ich USB Connect Event" aus dem Post entfernt (zusammen mit "Danke" Notizen) –

+0

Vielleicht wird das eine Hilfe für Sie sein? http://stackoverflow.com/questions/1088752/how-to-programmatics-discover-mapped-network-drives-on-system-and-their-serve –

+0

Sie meinen, die Verwendung von WMI? Ich denke, das kann funktionieren. Aber WMI-Anrufe sehr langsam :( Eine andere Lösung wäre toll. – raiserle

Antwort

0

Bezug nehmend auf das Beispiel und Informationen von Microsoft https://msdn.microsoft.com/en-us/library/system.io.driveinfo.getdrives(v=vs.110).aspx, fand ich den folgenden Code, um den Laufwerksbuchstaben und den Typ aller Laufwerke einschließlich der derzeit nicht verbundenen aber zugewiesenen Laufwerke zu erzeugen.

using System; 
using System.IO; 

namespace DriveInfoExample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DriveInfo[] drives = DriveInfo.GetDrives(); 
      foreach (DriveInfo d in drives) 
      { 
       // The only two properties that can be accessed for all drives 
       // whether they are online or not (ready) 
       // 
       Console.WriteLine(d.Name); 
       Console.WriteLine(d.DriveType); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

gemäß den Anweisungen auf dem oberen Link, wenn Sie versuchen, andere Attribute auf einem Laufwerk das zu bekommen, ist nicht bereit, ein IOException geworfen wird.

Eine Möglichkeit, dies zu handhaben ist drive.IsReady für wahr mit einer if-Anweisung zu überprüfen, bevor die anderen Eigenschaften erhalten (wie unten gezeigt und fast direkt über den Link oben gerissen):

using System; 
using System.IO; 

class DriveInfoExample 
{ 
    public static void Main() 
    { 
     DriveInfo[] drives = DriveInfo.GetDrives(); 

     foreach (DriveInfo d in drives) 
     { 
      Console.WriteLine(d.Name); 
      Console.WriteLine(d.DriveType); 
      if (d.IsReady == true) 
      { 
       Console.WriteLine(d.VolumeLabel); 
       Console.WriteLine(d.DriveFormat); 
       Console.WriteLine(d.AvailableFreeSpace); 
       Console.WriteLine(d.TotalFreeSpace); 
       Console.WriteLine(d.TotalSize); 
      } 
     } 
     Console.ReadLine(); 
    } 
} 

Der Schlüssel in Das obige Beispiel ist das if (d.IsReady == true), da es nur Attribute für Laufwerke erhält, die als bereit gelten, und Sie werden eine IO-Ausnahme nicht werfen.

+0

dieser Code funktioniert nicht. In meinem Fall: Ich habe einen Buchstaben (z), dies wurde auf einen Netzwerkpfad zugeordnet. Aber die Authentifizierung ist nicht verfügbar Auf dem Netzwerkpfad: Im Explorer können Sie den zugeordneten Laufwerksbuchstaben mit Z sehen: mit einem roten Kreuz. Die Funktion '' DriveInfo.GetDrives() '' gibt keinen Eintrag für diesen Buchstaben, so dass ich den Bereitschaftszustand überprüfen kann. – raiserle

+0

_ ** Bitte geben Sie den Code ein, den Sie verwenden, wenn Sie versuchen, den Laufwerkbuchstaben Z zu erhalten. ** _ Ohne den Code wird es schwierig sein, Ihr Problem aufzuspüren, da der obige Code in meinem Testfall gut funktioniert und funktioniert ein 'driveinfo' Objekt im' drives' Array für jedes Laufwerk, das im Explorer angezeigt wird - einschließlich derjenigen, die gerade getrennt sind –

+0

Tut mir leid, aber ich poste meinen Code. '' DriveInfo.GetDrives() '' funktioniert nicht Aufzählung über das Array ist nicht das Problem)! Die re Turn Array liefert keinen Buchstaben von "Z". Sie sollten lesen! Nicht getrennt, in meinem Fall! Nein, Auth! Und mit "No Auth" funktioniert Ihr Code nicht! – raiserle

Verwandte Themen