Feedback

VB - Erstellung eines virtuellen Laufwerks

Veröffentlicht von am 12/4/2007
(6 Bewertungen)
Mit der von mir erstellen Klasse, kann man ein nicht persistentes virtuelles Laufwerk erstellen. Anbei ein Beispiel wie man ein Laufwerk erstellt/löscht.

Laufwerk erstellen:
TL.Drive.VirtualDrive.Create('Z', @"C:\Musiksammlung");

Laufwerk löschen:
TL.Drive.VirtualDrive.Delete('Z', @"C:\Musiksammlung");
' 
' * VirtualDrive - Erstellung/Löschung von virtuellen Laufwerken 
' * ------------------------------------------------------------ 
' * Version: 1.0 
' * Copyright © 2007 Konstantin Gross 
' * http://www.texturenland.de 
' * 
' 

Imports System
Imports System.IO
Imports System.Runtime.InteropServices

Namespace TL.Drive
    ''' <summary> 
    ''' Erstellung und Löschung nicht persistenter virtueller Laufwerke. 
    ''' Das Laufwerk muss nach jedem Neustart des Systems wiederhergestellt werden. 
    ''' Wird nicht unter dem Registryschlüssel angezeigt : HKLM\System\MountedDevices. 
    ''' 
    ''' VirtualDrive - © Konstantin Gross 
    ''' </summary> 
    Public Class VirtualDrive
#Region "Win32"
        <DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
        Private Shared Function DefineDosDevice(ByVal dwFlags As Integer, ByVal lpDeviceName As String, ByVal lpTargetPath As String) As Boolean
        End Function

        <DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
        Private Shared Function GetDriveType(ByVal lpRootPathName As String) As Integer
        End Function

        Private Const DDD_RAW_TARGET_PATH As Integer = 1
        Private Const DDD_REMOVE_DEFINITION As Integer = 2
        Private Const DDD_EXACT_MATCH_ON_REMOVE As Integer = 4

        Private Const DRIVE_UNKNOWN As Integer = 0
        Private Const DRIVE_NO_ROOT_DIR As Integer = 1
        Private Const DRIVE_FIXED As Integer = 3
#End Region

#Region "Öffentliche Methoden"

#Region "Erstellen"
        ''' <summary> 
        ''' Erstellung eines nicht persistenten Laufwerks. 
        ''' </summary> 
        ''' <param name="driveChar">Laufwerksbuchstabe.</param> 
        ''' <param name="path">Pfad zu dem zu verknüpfenden Ordner.</param> 
        ''' <returns>True/False beim Versuch das Laufwerk zu erstellen</returns> 
        Public Shared Function Create(ByVal driveChar As Char, ByVal path As String) As Boolean
            Return DDDOperation(driveChar, path, True)
        End Function
#End Region

#Region "Löschen"
        ''' <summary> 
        ''' Löschung eines nicht persistenten Laufwerks. 
        ''' </summary> 
        ''' <param name="driveChar">Laufwerksbuchstabe.</param> 
        ''' <param name="path">Pfad zu dem zu verknüpfenden Ordner.</param> 
        ''' <returns>True/False beim Versuch das Laufwerk zu löschen</returns> 
        Public Shared Function Delete(ByVal driveChar As Char, ByVal path As String) As Boolean
            Return DDDOperation(driveChar, path, False)
        End Function
#End Region

#End Region

#Region "Private Methoden"

#Region "DDDOperationen"
        Private Shared Function DDDOperation(ByVal driveChar As Char, ByVal path As String, ByVal create As Boolean) As Boolean
            'Gültiges Verzeichnis? 
            If Not Directory.Exists(path) Then
                Return False
            End If

            Dim drive As String = String.Format("{0}:", driveChar.ToString().ToUpper())

            'Existiert das Volumen? 
            Dim type As Integer = GetDriveType(String.Format("{0}{1}", drive, System.IO.Path.DirectorySeparatorChar))

            'Hinweiß: Ein erstelltes virtuelles Laufwerk ist vom Typ DRIVE_FIXED 
            If (create AndAlso type <> DRIVE_UNKNOWN AndAlso type <> DRIVE_NO_ROOT_DIR) OrElse (Not create AndAlso type <> DRIVE_FIXED) Then
                Return False
            End If

            Dim flags As Integer = DDD_RAW_TARGET_PATH

            If Not create Then
                flags = flags Or (DDD_REMOVE_DEFINITION Or DDD_EXACT_MATCH_ON_REMOVE)
            End If
            Return DefineDosDevice(flags, drive, String.Format("{0}??{0}{1}", System.IO.Path.DirectorySeparatorChar, path))
        End Function
#End Region

#End Region
    End Class
End Namespace

2 Kommentare zum Snippet

Volker Steitz schrieb am 12/4/2007:
Funktioniert bestens. Hab´s auch gleich mal mit voller Punktzahl bewertet.
Vielen Dank.

Gruß Volker Steitz
Konstantin Gross schrieb am 12/5/2007:
Hallo, vielen Dank für die Bewertung, hat Spaß gemacht es für VB.NET umzuschreiben, ist ja komplettes Neuland :-)

Gruß
Konstantin
 

Logge dich ein, um hier zu kommentieren!