ロングパス名・ショートパス名の相互変換          <TOP>


ロングパス名からショートパス名へ、ショートパス名からロングパス名へ相互変換します。

GetShortPathName ファイルの短い形式のパス名を取得

GetLongPathName ロングパス名を取得

 

「開く(Long → Short)」でファイルを選択すると、ショート形式で表示されます。

念のため「クリア」でロングファイル名を消去し、「Short → Long」をクリックするとロング形式のパス名が表示されます。

ShortFileName欄に適当なショート形式パス名を入力後、「Short → Long」をクリックするとそのパスが存在した場合、ロング形式のパス名が表示されます。

 

'================================================================
'= ロングパス名・ショートパス名相互変換
'=    (LongShortFileName.bas)
'================================================================
#include "Windows.bi"

' ファイルの短い形式のパス名を取得
Declare Function Api_GetShortPathName& Lib "Kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath$, ByVal lpszShortPath$, ByVal lBuffer&)

' ロングパス名を取得
Declare Function Api_GetLongPathName& Lib "Kernel32" Alias "GetLongPathNameA" (ByVal lpszShortPath$, ByVal lpszLongPath$, ByVal cchBuffer&)

#define MAX_PATH 260

Var Shared Edit1 As Object
Var Shared Text(2) As Object
Var Shared Button(2) As Object

Edit1.Attach getDlgItem("Edit1") : EDit1.SetFontSize 14
For i = 0 To 2
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1)))
    Text(i).SetFontSize 14
    Button(i).Attach GetDlgItem("Button" & Trim$(Str$(i + 1)))
    Button(i).SetFontSize 14
Next

'================================================================
'=
'================================================================
Declare Function GetShortName(sLongFileName As String) As String
Function GetShortName(sLongFileName As String) As String
    Var sShortPathName As String
    Var iLen As Integer
    Var Ret As Long

    'バッファの設定
    sShortPathName = Space$(260)
    iLen = Len(sShortPathName)

    'ファンクションコール
    Ret = Api_GetShortPathName(sLongFileName, sShortPathName, iLen)

    '必要な長さを切り取る
    GetShortName = Left$(sShortPathName, Ret)
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var FileName As String
    Var sFile As String

    FileName = WinOpenDlg("ファイルのオープン", "*.*", "全てのファイル(*.*)", 0)
    If FileName <> Chr$(&H1B) Then
        Text(2).SetWindowText FileName
        Edit1.SetWindowText GetShortName(FileName)
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Text(2).SetWindowText ""
End Sub

'================================================================
'=
'================================================================
Declare Sub Button3_on edecl ()
Sub Button3_on()
    Var sLongPathName As String
    Var iLen As Integer
    Var Ret As Long

    'バッファの設定
    sLongPathName = Space$(260)
    iLen = Len(sLongPathName)

    'ファンクションコール
    Ret = Api_GetLongPathName(Edit1.GetWindowText, sLongPathName, iLen)

    '必要な長さを切り取る
    Text(2).SetWindowText Left$(sLongPathName, Ret)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End