Wenn man Dateipfade zusammensetzt oder, wie im Beispiel des Dateibrowsers,
ermittelt und sich durch den Verzeichnisbaum bewegt, kann es vorkommen, dass die Pfade relativ und mit allen Verzeichniswechseln
zurückgegeben werden.
C:\Temp\UV1\..\UV2\UUV2\..\Datei.txt
Um diese Pfadangabe in einen absoluten Pfad zu korrigieren, kann man auf das API PathCanonicalize zurückgreifen,
das genau
diese Änderungen vornimmt:
Private Declare Function PathCanonicalize Lib "shlwapi.dll" Alias "PathCanonicalizeA" _
(ByVal pszBuf As String, _
ByVal pszPath As String) As Long
Das Einbinden des API gestaltet sich ziemlich einfach, da es nur den Pfad als Parameter erwartet und das Ergebnis in
einen Puffer schreibt.
Dieser Puffer muss dazu nur groß genug angelegt (in diesem Beispiel 1024 Zeichen) und anschließend wieder auf den korrigierten
Pfad reduziert werden. Das Reduzieren des Puffers übernimmt dazu die Funktion
StripTerminator.
Function api_PathCanonicalize(sPath As String) As String
Dim strPuffer As String
' Leerstring zur Aufnahme des Ergebnisses anlegen
strPuffer = String(1024, vbNullChar)
PathCanonicalize strPuffer, sPath
' Ergebnisstring kürzen
api_PathCanonicalize = StripTerminator(strPuffer)
End Function
Beispiel:
Sub test()
Dim strPath As String
strPath = "C:\Test\.\Temp\Test1\..\..\Test2\UV1"
MsgBox api_PathCanonicalize(strPath)
'ergibt: C:\Test\Test2\UV1
End Sub
|