Aktuelle Seite:
/api/apiPathCanonicalize.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXPGetestet unter Win2000  
Makro/Datei speichern
Print

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 
Function StripTerminator(sInput As String) As String  
' vbNullChar im String abschneiden  
  Dim lPos As Long 
  lPos = InStr(1, sInput, vbNullChar)
  If lPos > 0 Then 
      StripTerminator = Left$(sInput, lPos - 1)
  Else 
      StripTerminator = sInput
  End If 
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 

 www.chf-online.de/api/apiPathCanonicalize.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)