Hallo Zusammen!
Ihr habt bestimmt mal das Problem gehabt, das bei einer Dateiauswahl der Laufwerksbuchstabe angegeben wurde. Und ggf. wurde dieser Pfad in einer Datenbank hinterlegt. Sollte sich jetzt der Laufwerksbuchstabe ändern, könnt Ihr nicht mehr auf das Vereichnis über den Laufwerksbezeichner zugreifen.
Um diesem vorzubeugen, habe ich eine Methode geschrieben, die die Auflösung des Laufwerksbuchstabens in den UNC-Pfad umwandelt.
Viel Spaß
''' <summary>
''' Diese Klasse dient zur Aufschlüsselung von Laufwerksbuchstaben
''' Sollte ein gemapptes Laufwerk übergeben werden, wird dieses in den UNC-Pfad aufgelöst.
''' </summary>
Public Class UncPfadDekoder
''' <summary>
''' Übergeben Sie den Ganzen Pfad oder nur den Laufwerksbuchstaben.
''' Der Laufwerksbuchstabe wird automatisch als UNC-Pfad aufgeschlüsselt
''' Handelt es sich um kein NetworkDrive, dann wird der Laufwerksbuchstabe zurückgegeben.
''' </summary>
''' <param name="path">Übergebt den ganzen Pfad oder nur den Laufwerksbuchstaben</param>
''' <returns></returns>
Public Shared Function getUncPath(path As String) As String
Dim ret As Integer
'out empfängt den UNC Pfad
Dim out As String = New String(" ", 260)
'Buffer länge wird bestimmt
Dim len As Integer = 260
'Resultstring wird definiert der zur späteren Rückgabe verwendet wird
Dim returnResult As String = path
' Falls der Pfad schon mit doppel Slash beginnt, benötigen wir keine weitere Auflösung
If path.StartsWith("\\") = False Then
Dim leftLetter As String = Left(path, 2)
ret = WNetGetConnection(leftLetter, out, len)
'ist der Rückgabewert 0, konnte ein UNC-Pfad aufgelöst werden.
If ret = 0 Then
returnResult = out.Substring(0, out.Length - 1).Replace(vbNullChar, "").Trim()
returnResult += path.Substring(2).ToString
Else
returnResult = path
End If
End If
Return returnResult
End Function
End Class