Attribute VB_Name = "xGetLongFilename2関数"

' @(h) xGetLongFilename2関数.bas                          ver 1.0 ( '98.10.09  )

' @(s)
'  ショートファイルネームからロングファイルネームを取得する関数モジュール
'  本モジュールはテスト用コードモジュールです。
'
Option Explicit

Sub xGetLongFilenameのテスト()      'ExcelまたはVisual Basicで実行してください。
Attribute xGetLongFilenameのテスト.VB_ProcData.VB_Invoke_Func = " \n14"
    
    'パス名 "C:\Program Files\Common Files" を取得します
    MsgBox "(" & xGetLongFilename("C:\PROGRA~1\COMMON~1") & ")"

End Sub

' @(f)
'
' 機能      : ショートファイルネームからロングファイルネームを取得する関数
'
' 返り値    : ロングファイルネーム
'
' 引き数    : sShortName    - ショートファイルネーム
'
' 機能説明  : ショートファイルネームからロングファイルネームを取得する関数
'
' 備考      : 特になし
'
Function xGetLongFilename(ByVal sShortName As String) As String
Attribute xGetLongFilename.VB_ProcData.VB_Invoke_Func = " \n14"
    
    Dim sLongName As String
    Dim sTemp As String
    Dim iSlashPos As Integer

    'Instr 関数がエラーにならないように文字列の最後に "\" をつけます
    sShortName = sShortName & "\"

    'ドライブ名は無視して 4 文字目から開始します
    iSlashPos = InStr(4, sShortName, "\")

    '\ 記号間の文字列を取り出します
    While iSlashPos
        sTemp = Dir(Left$(sShortName, iSlashPos - 1), _
                vbNormal + vbHidden + vbSystem + vbDirectory)
        If sTemp = "" Then
            'ファイル名が不正です
            xGetLongFilename = ""
            Exit Function
        End If
        sLongName = sLongName & "\" & sTemp
        iSlashPos = InStr(iSlashPos + 1, sShortName, "\")
    Wend

    'ドライブ名をつけます
    xGetLongFilename = Left$(sShortName, 2) & sLongName

End Function