[C#] Virtuelle Laufwerke / Devices erstellen

Drucken
( 0 Votes ) 
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 03.05.2012 Zuletzt aktualisiert am 03.05.2012 Geschrieben von Jonny132
Oftmals ist es brauchbar für bestimmte Ordner ein Virtuelles Verzeichnis anzulegen um sie leichter zu finden und dadurch schneller ansprechen zu können.
Mit C# und der Funktionalität der 'kernel32.dll' ist das erstellen Virtueller Verzeichnisse ein leichtes.

DefineDosDevice der kernel32.dll:
    [DllImport("kernel32.dll")]
    private static extern bool DefineDosDevice(int dwFlags, string lpDeviceName, string lpTargetPath);
Dank diesem DllImport und der Definition für die DefineDosDevice-Funktion ist es uns möglich in unserem .NET Programm Virtuelle Laufwerke zu erstellen.
Als erster Parameter wird hier eine Integer-Konstante erwartet (0=Erstellen, 2=Löschen), als zweiter Parameter muss der Laufwerksbuchstabe im exakten Format ("Laufwerkbuchstabe:") übergeben werden und als dritter Parameter übernimmt die Funktion den Ordner auf den das virtuelle Laufwerk gemappt werden soll.

  Funktion CreateVirtualDrive:
    private bool CreateVirtualDrive(DriveInfo newDrive, DirectoryInfo dir)
    {
      if (newDrive.DriveType != DriveType.NoRootDirectory && newDrive.DriveType != DriveType.Unknown)
        return false;

      return DefineDosDevice(0, newDrive.Name.Replace(@"\", "").ToUpper(), dir.FullName);
    }
Diese Funktion nimmt als Parameter eine DriveInfo und eine DirectoryInfo entgegen, wobei die DriveInfo, das Laufwerk beinhaltet welches erstellt werden soll und die DirectoryInfo den Ordner auf welche das virtuelle Laufwerk verweisen soll.
Da das Laufwerk nicht existieren darf, wenn wir es verwenden wollen, müssen wir zuerst den DriveType abgfragen.
Zu Ende der Funktion rufen wir die kernel32.dll-Funktion DefineDosDevice auf.


Funktion RemoveVirtualDrive:
    private bool RemoveVirtualDrive(DriveInfo newDrive)
    {
      if (newDrive.DriveType != DriveType.Fixed)
        return false;

      return DefineDosDevice(2, newDrive.Name.Replace(@"\","").ToUpper(), null);
    }
Auch hier wird als Parameter eine DriveInfo entgegengenommen, welche das zu entfernende virtuelle Laufwerk beinhaltet. Zur Sicherheit überprüfen wir noch ob der DriveType den Wert 'Fixed' (=virtuell) hat.

Aufrufbeispiel:
      if (!CreateVirtualDrive(new DriveInfo("b"), new DirectoryInfo(@"C:\Temp")))
      {
        MessageBox.Show("Laufwerk konnte erstellt werden");
      }

      if (!RemoveVirtualDrive(new DriveInfo("w")))
      {
        MessageBox.Show("Laufwerk konnte nicht entfernt werden");
      }

   

    

    Veröffentlichen Sie ihre Kommentare ...