Pfade und Verzeichnisse |
|
Bei der Verwendung von Verzeichnisnamen und Dateipfaden, z.B. zum Öffnen von Dateien oder beim Überprüfen, ob Verzeichnisse vorhanden sind, ist eine korrekte Syntax wichtig. So verlangt die Dir-Funktion keinen abschließenden Backslash wenn ein Verzeichnis überprüft wird, wärend ein Backslash bei der Dateinamenssuche im Verzeichnis notwendig ist. So liefert der folgendem Aufruf den existierenden Ordnernamen zurück, während mit Backslash der erste Dateieintrag im Ordner zurückgeliefert wird (sofern der Ordner existiert) Ein weiteres Problem tritt bei der Kombination von Pfad und Dateinamen bzw. bei zwei Ordnernamen auf: Es muss sichergestellt werden, dass der Gesamtpfad korrekt gesetzte Backslashes beinhaltet. Normalerweise müssten händisch beide Pfadteile auf beginnende bzw. endende Backslashes überprüft werden, bevor sie kombiniert werden können, da ansonsten Fehler auftreten können. Debug.Print "C:\temp" & "Test.doc" > C:\tempTest.doc Debug.Print "C:\temp\" & "\Test.doc" > C:\temp\\Test.doc Um all diese Probleme in den Griff zu bekommen, kann man auf einen Satz von API-Funktionen zurückgreifen, die sich um die korrekte Kombination und Erstellung von Pfaden kümmern. ' Kombiniert zwei korrekt formatierte Pfade Declare Function PathCombine Lib "shlwapi.dll" Alias "PathCombineA" _ (ByVal szDest As String, _ ByVal lpszDir As String, _ ByVal lpszFile As String) As Long ' Abschließenden Backslash anhängen, falls nicht vorhanden Private Declare Function PathAddBackslash Lib "shlwapi.dll" Alias _ "PathAddBackslashA" _ (ByVal pszPath As String) As Long ' Pfad oder Datei an einen Pfad anhängen Private Declare Function PathAppend Lib "shlwapi.dll" Alias "PathAppendA" _ (ByVal pszPath As String, ByVal pMore As String) As Long Zur besseren Handhabung dieser APIs wird der Aufruf jeweils in einer Funktion gekapselt, die sich um den Aufruf und die korrekte Anwendung kümmert. Function apiPathCombine(sPath1, sPath2) As String Dim sPath As String sPath = String(255, vbNullChar) PathCombine sPath, sPath1, sPath2 apiPathCombine = StripTerminator(sPath) End Function ' Function apiAddSlash(ByVal sString As String) As String sString = sString & String(100, vbNullChar) PathAddBackslash sString apiAddSlash = StripTerminator(sString) End Function ' Function apiAddSlash(ByVal sString As String) As String sString = sString & String(100, vbNullChar) PathAddBackslash sString apiAddSlash = StripTerminator(sString) End Function 'Entfernt alle auffüllenden Bufferzeichen Chr$(0) Function StripTerminator(sInput As String) As String Dim ZeroPos As Long ZeroPos = InStr(1, sInput, vbNullChar) If ZeroPos > 0 Then StripTerminator = Left$(sInput, ZeroPos - 1) Else StripTerminator = sInput End If End Function Der Aufruf erfolgt dann über diese Funktion, der die beiden zu kombinierenden Pfade als Parameter mit gegeben wird. Als Rückgabewert erhält man den kompletten Pfad. Sub Pfadkombinieren() Dim ret, sPfad1, sPfad2 As String sPfad1 = "C:" ' oder "C:\" ' sPfad2 muss relativ zu sPfad1 angegeben werden, ansonsten wird ' er absolut zur Wurzel von sPfad1 angegeben sPfad2 = "temp" ' oder "\temp" ret = apiPathCombine(sPfad1, sPfad2) 'liefert C:\temp 'aber sPath1 = "C:\temp\" sPfad2 = "\temp1" ret = apiPathCombine(sPath, sPfad2) 'liefert C:\temp1 End Sub ' Sub Pfadabschließen() Dim ret, sPfad1 As String sPfad1 = "C:\temp" ret = apiAddSlash(sPfad1) 'liefert C:\temp\ End Sub ' Sub PfadmitDateikombinieren() Dim ret, sPfad, sFile As String sPfad = "C:\temp\" sFile = "\test.doc" ret = apiAppendFile(sPfad, sFile) 'liefert C:\temp\test.doc End Sub |
Besucher: 0 online | 0 heute | 0 diesen Monat | 723853 insgesamt | Seitenaufrufe: 36 | Letzte Änderung: 24.06.2006 | © 2001-18 Christian Freßdorf | ||||
Selbstbeherrschung ist der erste Schritt zur Beherrschung anderer. Arthur Stahl |
powered by phpCMS and PAX |