Kurze Dateinamen in lange Dateinamen umwandeln
Veröffentlicht am 28.08.2008 von Sebastian Krogolewski
In der Windows Welt kennt man Mittlerweile alle Dateinamen in der Langform C:\Dokumente und Einstellungen\Testbenutzer\Eigene Dateien\Textdatei.txt, aber es gibt noch API Funktionen und ältere Anwendungen welche mit der kurzform C:\DOKUME~1\TESTBE~1\EIGENE~1\TEXTDA~1.TXT arbeiten. Windows bietet die API Funktion GetLongPathNameA bzw. GetLongPathNameW aus der Kernel32.Dll an um diese Pfadangaben von der Kurzform in die Langform zu konvertieren.
Einbinden der Win API Funktion GetLongPathNameA als GetShortPathName aus der Kernel32.Dll.
1 2 3 | Private Declare Function GetLongPathName Lib "kernel32" Alias "GetLongPathNameA" ( _ ByVal lpszShortPath As String, ByVal lpszLongPath As String, _ ByVal cchBuffer As Long) As Long |
GetLongPathName erwartet 3 Parameter:
lpszShortPath: Pfad welcher in die Langform konvertiert werden soll.
lpszLongPath: Zeiger auf Speicherbereich in dem der Pfad in langform zurückgeliefert werden soll.
cchBuffer: Größe des Speichers auf den lpszLongPath zeigt.
Rückgabewert:
Bei Erfolg: tatsächliche länge des konvertierten Pfades in langform ohne das Terminierungseichen.
Bei Fehlschlag: Größe des benötigten Speicherbereichs inkl. Terminierungszeichen oder 0 bei Fehlern wie Datei exestiert nicht, aber mit GetLastError kann man hierzu genauere Information abrufen.
Funktion mit Aufruf von GetLongPathName und als Funktionsergebnis der lange Dateiname.
1 2 3 4 56 7 8 9 1011 12 13 | Public Function GetLongName(ByVal ShortName As String) As String Dim strLong As String Dim strLen As Long strLen = GetLongPathName(ShortName, strLong, Len(strLong))If (strLen > 0) Then strLong = String$(strLen, 0) strLen = GetLongPathName(ShortName, strLong, Len(strLong)) If (strLen = Len(strLong) - 1) Then GetLongName = Left$(strLong, strLen) End If End If End Function |
1 | GetLongName("C:\Dokume~1\Lordcroc\Desktop\test.txt") |






