Tipps und Tricks rund um .NET und Visual Studio

Framework Class Library Enums und Bitmasken Prüfung auf 64-Bit und Laufwerksfüllstand ermitteln
Kommentare

In diesem Teil von .NETversum widmen sich Dr. Holger Schwichtenberg und Manfred Steyer der Framework Class Library. Es geht um Enums und Bitmasken, die Prüfung auf 64-Bit und wie der Laufwerksfüllstand ermittelt werden kann.

Enums und Bitmasken: Um das Arbeiten mit Enums, die Bitfelder widerspiegeln, zu erleichtern, bieten sie seit .NET 4.NET 4.0 die Methode HasFlag an. Sie hilft dabei herauszufinden, ob ein bestimmtes Flag gesetzt ist, ohne dass man sich über Bit-Operationen Gedanken machen muss. Für die Variable felix vom Typ CatState werden in Listing 1 zum Beispiel die Flags für ANGRY mit dem Wert 1 (Binär: 0000001) sowie das Flag für HUNGRY mit dem Wert 4 (Binär: 00000100) gesetzt, indem diese beiden Werte mit einem binären oder verknüpft werden. Diese Variable repräsentiert somit eine Bitmaske, bei der das erste und das dritte Flag (von rechts) gesetzt sind (00000101). Um in weiterer Folge herauszufinden, ob das Flag für ANGRY gesetzt ist, wird die Methode HasFlag herangezogen.

Listing 1

[Flags] enum CatState { ANGRY = 1, SLEEPY = 2, HUNGRY = 4 };
static void HasFlagSample()
{
    CatState felix = CatState.ANGRY | CatState.HUNGRY;
    bool isAngry = felix.HasFlag(CatState.ANGRY);
    Console.WriteLine("isAngry: " + isAngry);
}  

Prüfung auf 64-Bit: Mit zwei Eigenschaften kann ab.NET 4.0 geprüft werden, ob die aktuelle Applikation in einem 64-Bit-Prozess läuft und ob es sich bei dem aktuellen Betriebssystem um ein 64-Bit-Betriebssystem handelt. Für Ersteres steht Is64BitProcess zur Verfügung; für Letzteres Is64BitOperatingSystem. Ein Beispiel, das die Werte dieser beiden booleschen Eigenschaften auf der Konsole ausgibt, befindet sich in Listing 3.

Listing 2

Console.WriteLine("Is64BitProcess: " + Environment.Is64BitProcess);
Console.WriteLine("Is64BitOperatingSystem : " + Environment.Is64BitOperatingSystem);  

Laufwerksfüllstand ermitteln: Um den Füllstand eines Laufwerks zu ermitteln, gibt es seit dem .NET Framework 2.0 in der Klasse DriveInfo die Attribute TotalSize und TotalFreeSpace (Listing 3). Allerdings kann man damit nur den Füllstand lokaler Laufwerke ermitteln. Manchmal muss man wissen, wie es um andere Rechner (z. B. den File Server) bestellt ist. Hier hilft die Windows Management Instrumentation (WMI), die in .NET im Namensraum System.Management (Assembly System.Management.dll) zur Verfügung steht (Listing 4). Zu beachten ist, dass der Laufwerksbuchstaben ohne „:“ geschrieben werden muss und dass diese Aktion Administratorrechte auf dem Zielsystem erfordert.

Listing 3

string Laufwerksbuchstabe = @"C:";
DriveInfo[] Drives = DriveInfo.GetDrives();
DriveInfo Drive = Drives.Where(x => x.Name == Laufwerksbuchstabe).SingleOrDefault();
Console.WriteLine("Freier Speicher auf " + Laufwerksbuchstabe +": " + Drive.TotalFreeSpace + " von " + Drive.TotalSize);  

Listing 4

string Computer = "ITVisionsFileServer03";
string LaufwerksbuchstabeWMI = @"C";
ManagementObject disk = new ManagementObject("\\" + Computer + "\root\cimv2:Win32_LogicalDisk.DeviceID='" + LaufwerksbuchstabeWMI + ":'");
Console.WriteLine("Freier Speicher auf " + LaufwerksbuchstabeWMI + ": " + disk.Properties["FreeSpace"].Value + " von " + Convert.ToInt64(disk.Properties["Size"].Value));  

Dr. Holger Schwichtenberg (MVP) und FH-Prof. Manfred Steyer arbeiten bei http://www.IT-Visions.de als Softwarearchitekten, Berater und Trainer für .NET-Technologien. Dabei unterstützen sie zahlreiche Unternehmen beim Einsatz von .NET und entwickeln selbst in größeren Projekten. Sie haben zahlreiche Fachbücher geschrieben und gehören seit vielen Jahren zu den Hauptsprechern auf der BASTA. Manfred Steyer ist zudem verantwortlich für den Fachbereich „Software Engineering“ der Studienrichtung „IT und Wirtschaftsinformatik“ an der FH CAMPUS 02 in Graz. Dr. Holger Schwichtenberg unterrichtet in Lehraufträgen an den Fachhochschulen Münster und Graz.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -