Diese Klasse macht das was Du brauchst. Sie stammt von Konstantin Gross und funktioniert hervorragend.
Wenn Du sie verwendest, sollte in der App-Info stehen, dass Du diese Klasse von Ihm hast.
Gruß Volker
'
' * VirtualDrive - Erstellung/Löschung von virtuellen Laufwerken
' * ------------------------------------------------------------
' * Version: 1.0
' * Copyright © 2007 Konstantin Gross
' * http://www.texturenland.de
' *
'
Aufruf zum Verbinden
Dim tl As New VDrive
VDrive.Create("Z", "C:\Temp")
Aufruf zu Trennen
VDrive.Delete("Z", "C:\Temp")
Imports System
Imports System.IO
Imports System.Runtime.InteropServices
Public Class VDrive
#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 |