ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 02.11.2001

Diese Seite wurde zuletzt aktualisiert am 02.11.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Kurz und lang

Zurück...


Anzeige

(-hg) mailto:hg_shortlongpaths@aboutvb.de

Auch wenn sich die verkürzten Formen kurzer Pfad- und Dateinamen im 8+3-Format mit ihrem typischen Erscheinungsbild ("C:\Progra~1") seit dem Erscheinen von Windows XP eigentlich erledigt haben sollten, werden Ihnen Namen in diesem Format natürlich noch auf unbestimmte Zeit hin begegnen. Ihre Anwendungen sollten daher in der Lage sein, mit solcherart verkürzten Namen umgehen zu können.

Die Ermittlung eines kurzen Dateipfades aus einem gegebenen langen Dateipfad ist einfach. Die API-Funktion GetShortPathName liefert ihn ohne größeren Aufwand. Es sind lediglich die "üblichen" C-typischen Gegebenheiten des Funktionsaufrufs zu berücksichtigen, die die folgende Funktion ShortPath für Sie kapselt:

Private Declare Function GetShortPathName Lib "kernel32" _
 Alias "GetShortPathNameA" (ByVal LongPath As String, _
 ByVal ShortPath As String, ByVal BufferSize As Long) As Long

Public Function ShortPath(Path As String) As String
  Dim nSize As Long
  
  ShortPath = Space$(256)
  nSize = GetShortPathName(Path, ShortPath, 255)
  ShortPath = Left$(ShortPath, nSize)
End Function

Für die Umkehrung gibt es eine solche direkte und daher einfach handzuhabende API-Unterstützung erst ab Windows 98 und Windows 2000 mit der API-Funktion GetLongPathName. Ihr Aufruf erfolgt nach dem gleichen Schema - die Verpackung in die Funktion LongPath sieht daher nahezu identisch aus.

Private Declare Function GetLongPathName Lib "kernel32" _
 Alias "GetShortPathNameA" (ByVal ShortPath As String, _
 ByVal LongPath As String, ByVal BufferSize As Long) As Long

Public Function LongPath(Path As String) As String
  Dim nSize As Long
  
  LongPath = Space$(256)
  nSize = GetLongPathName(Path, LongPath, 255)
  LongPath = Left$(LongPath, nSize)
End Function

Eines ist allerdings zu beachten: Während die API-Funktion GetShortPathName keine Schwierigkeiten mit Netzwerkpfaden (UNC-Pfade wie "\\Computername\Pfad\...") zu haben scheint und zu solchen Pfaden anstandslos gegebenenfalls die Kurzform liefert, gibt GetLongPathName den übergebenen Pfad unverändert zurück und wandelt darin enthaltene Kurzformbestandteile nicht in ihre lange Form um.

Wenn Sie für Ihre Anwendungen auch Windows 95 und Windows NT als Plattformen zulassen wollen, brauchen Sie einen Ersatz für GetLongPathName. Die (MSDN-)Dokumentation zu GetShortPathName schlägt vor, für jeden einzelnen Bestandteil (Ordner und schließlich Datei) des gesamten Pfades die API-Funktion FindFirstFile aufzurufen, um so den langen Namen für eben diesen jeweiligen Bestandteil zu erhalten. Der gesamte Pfad in Langform muss anschließend aus den einzeln umgesetzten Bestandteilen wieder zusammengesetzt werden. Da die VB-Funktion Dir$ genau das gleiche leistet (einschließlich der Weigerung, UNC-Pfade zu verarbeiten), können Sie bequem in "reinem" VB-Code verbleiben und die Dir$-Funktion verwenden. Die folgende Funktion LongPath2 erledigt für Sie das Umsetzen der einzelnen Bestandteile und das anschließende Zusammenfügen des gesamten Pfades. Wird ein UNC-Pfad übergeben, bleibt der übergebene Pfad unverändert.

Public Function LongPath2(ByVal Path As String) As String
  Dim nParts() As String
  Dim i As Integer
  Dim nLongPath As String
  Dim nPath As String
  Dim nTestPath As String
  
  If Left$(Path, 2) = "\\" Then
    LongPath2 = Path
  Else
    nParts = Split(Path, "\")
    If UBound(nParts) > 0 Then
      If Len(nParts(1)) Then
        nLongPath = nParts(0)
        nTestPath = nLongPath
        For i = 1 To UBound(nParts)
          nTestPath = nTestPath & "\" & nParts(i)
          nPath = Dir$(nTestPath, vbDirectory Or vbHidden _
           Or vbReadOnly Or vbSystem)
          If Len(nPath) Then
            nLongPath = nLongPath & "\" & nPath
          Else
            Exit Function
          End If
        Next 'i
        LongPath2 = nLongPath
      Else
        LongPath2 = Path
      End If
    End If
  End If
End Function

Modul modShortLongPaths (modShortLongPaths.bas - ca. 2 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer