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

https://www.vbarchiv.net
Rubrik: Dateisystem · Dateien allgemein   |   VB-Versionen: VB4, VB5, VB629.10.03
Langen Dateinamen ermitteln III

Eine weitere Variante, die den vollständigen langen Pfad- und Dateiname aus einer Pfadangabe mit kurzer Schreibweise ermittelt.

Autor:   Microsys KramerBewertung:  Views:  10.582 
www.access-paradies.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Liegt ein Dateiname in der kurzen alten DOS-Schreibweise 8.3 vor, so lässt sich dieser mit nachfolgenden Code in seine lange Schreibweise umwandeln. Voraussetzung ist natürlich, dass die Datei im angegebenen Verzeichnis auch tatsächlich existiert.

Option Explicit
 
' Benötigte API-Deklarationen
Private Const MAX_PATH& = 260
Private Const INVALID_HANDLE_VALUE = -1
 
Private Type FILETIME
  dwLowDateTime As Long
  dwHighDateTime As Long
End Type
 
Private Type WIN32_FIND_DATA  '  318  Bytes
  dwFileAttributes As Long
  ftCreationTime As FILETIME
  ftLastAccessTime As FILETIME
  ftLastWriteTime As FILETIME
  nFileSizeHigh As Long
  nFileSizeLow As Long
  dwReserved¯ As Long
  dwReserved1 As Long
  cFileName As String * MAX_PATH
  cAlternate As String * 14
End Type
 
Private Declare Function apiFindFirstFile Lib "kernel32" _
  Alias "FindFirstFileA" ( _
  ByVal lpFileName As String, _
  lpFindFileData As WIN32_FIND_DATA) As Long
 
Private Declare Function apiFindClose Lib "kernel32" _
  Alias "FindClose" ( _
  ByVal hFindFile As Long)As Long
' Funktion zum Ermitteln des langen Pfad-/Dateinamen
Public Function fGetLongName(ByVal strFileName As String) As String
  Dim lpFindFileData As WIN32_FIND_DATA
  Dim strPath As String
  Dim lngRet As Long
  Dim strFile As String
  Dim strTmp As String
 
  strTmp = ""
  Do While Not lngRet = INVALID_HANDLE_VALUE
    lngRet = apiFindFirstFile(strFileName, lpFindFileData)
 
    strFile = Left$(lpFindFileData.cFileName, _
      InStr(lpFindFileData.cFileName, vbNullChar) - 1)
 
    If Len(strFileName) > 2 Then
      strTmp = strFile & "\" & strTmp
      strFileName = fParseDir(strFileName)
    Else
      strTmp = strFileName & "\" & strTmp
      Exit Do
    End If
  Loop
  fGetLongName = Left$(strTmp, Len(strTmp) - 1)
  Call apiFindClose(lngRet)
End Function
' Hilfsfunktion
Private Function fParseDir(strInFile As String) As String
  Dim intLen As Long
  Dim boolFound As Boolean
  Dim i As Integer
  Dim f As String
  Dim strDir As String
 
  intLen = Len(strInFile)
  If intLen > 0 Then
    boolFound = False
    For i = intLen To 1 Step -1
      If Mid$(strInFile, i, 1) = "\" Then
        f = Mid$(strInFile, i + 1)
        strDir = Left$(strInFile, i - 1)
        boolFound = True
        Exit For
      End If
    Next i
  End If
  If boolFound Then
    fParseDir = strDir
  Else
    fParseDir = strInFile
  End If
End Function

Aufruf:

Dim sFile As String
 
' kurze Schreibweise
sFile = "c:\eigene~1\dokume~1\beitra~1.doc"
 
' lange Schreibweise
' c:\Eigene Dateien\Dokumente\Beitragserhöhung.doc
sFile = fGetLongName(sFile)



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.