2
www.ChF-Online.de  

Relative Pfadangaben in absolute ändern

   Neuigkeiten
   API-Aufrufe in VBA
 Belieb. Datei öffnen
 CommonDialog-Fehler
 Dateidatum lesen & setzen
aktiv aktiv rel. Dateipfad korrigieren
 Flex. Öffnen-Dialog
 Flex. Speichern-Dialog
 Kurze Unterbrechung
 Pfade und Verzeichnisse
 Spracheinstellung
 TreeView löschen
 Verzeichnisauswahl
 Verzeichnisauswahl /UNC
   VBA2HTML
   Word
   Word-VBA
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
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 

 Besucher: 1 online  |  35 heute  |  1631 diesen Monat  |  1601617 insgesamt | Seitenaufrufe: 45   Letzte Änderung: 24.06.2006 © 2001-14 Christian Freßdorf
  Es ist durchaus denkbar, daß der Krieg der Vater aller Dinge ist - der Vater aller Menschen ist er garantiert nicht.
Werner Schneyder
 powered by phpCMS and PAX