Tipps und Tricks rund um .NET und Visual Studio

Liste der verfügbaren Laufwerke
Kommentare

Dr. Holger Schwichtenberg (MVP) und FH-Prof. Manfred Steyer teilen in der Kolumne „.NETversum“ ihr Expertenwissen rund um .NET-Tools und WPF mit.

Viele Anwendungen müssen die verfügbaren Laufwerke kennen, um z. B. dem Benutzer eine Laufwerksauswahl zum Speichern anzubieten. Im .NET Framework gibt es dazu die statische Methode GetDrives() in der Klasse System.IO.DriveInfo. Die Methode liefert ein Array von DriveInfo-Objekten. Zu beachten ist, dass einige Informationen (z. B. VolumeName) nicht von Wechselmedienlaufwerken abgerufen werden können, wenn kein Medium eingelegt ist. Daher muss man vor dem Zugriff auf diese Eigenschaften prüfen, ob IsReady wahr ist (Listing 1).

Listing 1

/// 
  /// Liefert die Liste aller lokalen Laufwerke mit FCL-Klassen
/// 
public static void GetDrivesFCL()
{
  var drives = System.IO.DriveInfo.GetDrives();
  foreach (var drive in drives)
  {
    if (drive.IsReady)
    {
      Console.WriteLine("{0,-10} {1,-20} ({2})", drive.Name, drive.VolumeLabel, drive.DriveType);
    }
    else
    {
      Console.WriteLine("{0,-10} {1,-20} ({2})", drive.Name, "?", drive.DriveType);
    }
  }
}

Die GetDrives()-Methode liefert allerdings nur die Laufwerke auf dem lokalen System, auf dem der .NET-Prozess läuft. Um die verfügbaren Laufwerke eines entfernten Systems abzufragen, braucht man die Windows Management Instrumentation (WMI) und die dortige Klasse Win32_LogicalDisk. Mithilfe der .NET-Klasse System.Management.ManagementClass kann man auf die WMI-Klassendefinition zugreifen. Den Namen des anzusprechenden Computers gibt man im WMI-Pfad an. Ein Punkt steht dabei für den lokalen Computer.

Aus der WMI-Klassendefinition kann man dann mit GetInstances() alle Instanzen abrufen. Diese Instanzen bekommt man in Form von Objekten der Klasse System.Management.ManagementObject. Hier gibt es aber leider kein IsReady. Man muss also prüfen, ob eine Information vorhanden ist, bevor man sie abruft. Für das Codebeispiel in Listing 2 muss die System.Management.dll – verfügbar ab .NET 1.0 – referenziert werden.

 Listing 2

/// 
  /// Liefert die Liste aller lokalen oder entfernten Laufwerke mit WMI
/// 
public static void GetDrivesWMI(string Computer = ".")
{
  // Zugriff auf WMI-Klasse
  ManagementClass mc = new ManagementClass(@"\" + Computer + @"rootcimv2:Win32_LogicalDisk");
  // Alle Instanzen abrufen
  ManagementObjectCollection menge = mc.GetInstances();
  // Schleife über alle ermittelten Objekte
  foreach (ManagementObject mo in menge)
  {
    if (mo["VolumeName"] !=null)
    {
      Console.WriteLine("{0,-10} {1,-20} ({2})", mo["Name"], mo["VolumeName"], mo["DriveType"]);
    }
    else
    {
      Console.WriteLine("{0,-10} {1,-20} ({2})", mo["Name"], "?", mo["DriveType"]);
    }
  }
}
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -