Rubrik: Dateisystem · Ordner & Verzeichnisse | VB-Versionen: VB4, VB5, VB6 | 03.09.03 |
Verschachtelter Verteichnispfad: aus kurz mach lang Manchmal bekommt man ein Verzeichnis in seiner kurzen 8.3 Schreibweise geliefert. Dieser Tipp verrät, wie man daraus den lesbaren langen Ordnernamen zaubert. | ||
Autor: Dieter Otter | Bewertung: | Views: 10.530 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Manchmal bekommt man statt des langen Verzeichnispfades eine "kryptische" kurze Bezeichnung "geliefert". Diese kurze Schreibweise stammt noch aus alten DOS-Zeiten, bei denen ein Ordner aus max. 8 Zeichen, Punkt und weiteren 3-Zeichen für die Extension bestand.
So gibt z.B. die API-Funktion GetTempPath auf vielen Systemen die kurze Schreibweise zurück:
C:\DOKUME~1\DIETER~1\LOKALE~1\Temp
Wie man diesen "kryptische" Pfad in einen "lesbaren" langen Pfad umwandelt, das erfahren Sie heute:
' Langen Ordnernamen ermitteln Public Function GetLongName(ByVal sShortName As String) As String Dim sOrdner() As String Dim sLongName As String Dim i As Integer Dim sTemp As String Dim iCount As Integer Dim sOrgName As String ' Ursprungspfad merken sOrgName = sShortName ' Ggf. abschließenden Backslash hinzufügen If Right$(sShortName, 1) <> "\" Then sShortName = sShortName & "\" ' Pfad in Einzelordner zerlegen sLongName = "" sOrdner = Split(sShortName, "\") ' Anzahl Ordner ermitteln iCount = UBound(sOrdner) ' Gesamtordner ordnerweise rückwärts durchlaufen ' und den jeweiligen langen Ordnernamen ermitteln On Error Resume Next For i = iCount To 1 Step -1 Err.Clear ' Langen Ordnernamen ermitteln sTemp = Dir$(sShortName, vbDirectory + vbHidden) If Err.Number <> 0 Then Exit For If sTemp <> "." Then ' Langen Gesamtordner "zusammenbauen" sLongName = sTemp & "\" & sLongName End If ' ursprünglichen Ordner kürzen sShortName = Left$(sShortName, Len(sShortName) - Len(sOrdner(i)) - 1) Next i ' Falls ein Fehler aufgetreten ist den ' Ursprungsordner zurückgeben If Err.Number <> 0 Then sLongName = sOrgName Else sLongName = sOrdner(0) & "\" & sLongName ' ggf. abschließenden Backslash entfernen If Right$(sOrgName, 1) <> "\" Then sLongName = Left$(sLongName, Len(sLongName) - 1) End If End If On Error GoTo 0 GetLongName = sLongName End Function
Beispiel für den Aufruf:
Dim sTempPath As String sTempPath = Environ$("TEMP") ' kruze Schreibweise MsgBox "Kurz: " & sTempPath ' lange Schreibweise sTempPath = GetLongName(sTempPath) MsgBox "Lang: " & sTempPath