vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Dateisystem · Ordner & Verzeichnisse   |   VB-Versionen: VB4, VB5, VB603.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 OtterBewertung:  Views:  10.514 
www.tools4vb.deSystem:  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



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.