RSS
StartseiteKnowledge LibraryTop 10Impressum

Verbundene Pfade

Pfad und Dateinamen miteinander verbinden - Backslash inklusive

Das Zusammenstellen eines Pfad- und Dateinamens, gehört wohl zu den alltäglichsten Aufgaben überhaupt. Doch gerade diese einfachen Dinge des Alltags, können ihre Tücken haben...

Es gehört wohl zu den alltäglichsten Aufgaben überhaupt, das Zusammenstellen eines Pfad und Dateinamens, um eine Datei zu öffnen. Klassisches Beispiel ist der Zugriff auf Dateien, die im Anwendungsverzeichnis abgelegt sind. App.Path liefert den Anwendungspfad, also einfach diesen mit dem Dateinamen verknüpft und...

FileName = App.Path & "\file.dat"

...darauf hoffen, dass nicht irgendein Anwender auf die Idee kommt, die Anwendung in das Hauptverzeichnis eines Laufwerks zu legen, denn dann ist der abschließende Backslash schon inklusive. Das Ergebnis der obigen Anweisung:

"C:\\file.dat"

Diese Pfadangabe führt natürlich zu der Fehlermeldung, dass die Datei nicht gefunden wurde.

Das Shell API hält eine praktische und verlockend klingende API Funktion PathAppend bereit, die einen Pfad aus zwei Pfaden zusammensetzt und bei Bedarf den Backslash einfügt:

Private Const MAX_PATH = 260

Private Declare Function SHPathAppend Lib "shlwapi" Alias "PathAppendA" _
       (ByVal pszPath As String, ByVal pszMore As String) As Long

Public Function PathAppend(ByVal Path As String, _
                           ByVal More As String) As String
  
  Path = Path & String$(MAX_PATH - Len(Path), vbNullChar)
  
  If (SHPathAppend(Path, More)) Then
    PathAppend = Left$(Path, InStr(1, Path, vbNullChar) - 1)
  End If
End Function

Aber wer wird schon eine API Funktion einsetzen und zugleich den Internet Explorer 4 zur Systemvoraussetzung seiner Anwendung machen, wenn sich gleiches Ergebnis auch mit VB Bordmitteln erzielen lässt?

Public Function PathAppend(ByVal Path As String, _
                           ByVal More As String) As String

  If (Right$(Path, 1) <> "\") Then
    Path = Path & "\"
  End If
  
  If (Left$(More, 1) = "\") Then
    More = Mid$(More, 2)
  End If
  
  PathAppend = Path & More
End Function

In der Anwendung sind beide Funktionen gleich:

FileName = PathAppend(App.Path, "file.dat")