Make your own free website on Tripod.com

Home
Home

--- Soumis par Dev Ashish---

Obtenir le nom abbrégé d'un fichier ou le nom au long.

    Les fonctions fGetShortName et fGetLongName vous retournent les noms appropriés.

'************ Code Start **********
Private Const MAX_PATH& = 260
Private Const INVALID_HANDLE_VALUE = -1

Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

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

Private Declare Function apiGetShortPathName Lib "kernel32" _
    Alias "GetShortPathNameA" _
    (ByVal lpszLongPath As String, _
    ByVal lpszShortPath As String, _
    ByVal cchBuffer As Long) _
    As Long

Function fGetShortName(ByVal stLongPath As String) As String
'[ opposite of fGetLongName() ]
'Exemples d'utilisation:
'?fGetShortName("D:\Internet Explorer 4.0 Setup\This folder is safe to delete.txt")
'D:\INTERN~1.0SE\THISFO~1.TXT
'
'?fGetShortName(currentdb.Name)
'C:\PROGRA~1\MICROS~2\Office\Samples\SOLUTI~1.MDB
'
    Dim stShortPath As String
    Dim lngBuffer As Long, lngRet As Long
    stShortPath = String$(MAX_PATH, 0)
    lngBuffer = Len(stShortPath)
    lngRet = apiGetShortPathName(stLongPath, stShortPath, lngBuffer)
    fGetShortName = Left(stShortPath, lngRet)
End Function
'
Function fGetLongName(ByVal strFileName As String) As String
'
'Exemple d'utilisation::
'?fGetLongName("D:\INTERN~1.0SE\THISFO~1.TXT")
'D:\Internet Explorer 4.0 Setup\This folder is safe to delete.txt
'
'?fGetLongName(currentdb.Name)
'C:\Program Files\Microsoft Office\Office\Samples\Solutions.mdb
'
'?fGetLongName("C:\PROGRA~1\MICROS~2\Office\Samples\Northwind.mdb")
'C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb
'
    Dim lpFindFileData As WIN32_FIND_DATA
    Dim strPath As String, lngRet As Long
    Dim strFile As String, lngX As Long, lngY As Long
    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)
    lngY = apiFindClose(lngRet)
End Function

Private Function fParseDir(strInFile As String) As String
Dim intLen As Long, boolFound As Boolean
Dim i As Integer, f As String, 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
'************ Code End **********