フルパスからファイル名と拡張子だけを取得するには

フルパスからファイル名と拡張子だけを取得します。
キーワードは「PathFindFileName()関数」と「PathFindExtension()関数」です。
PathFindFileName()関数は、フルパスからファイル名だけを
PathFindExtension()関数は、フルパスから拡張子だけを返します。
どちらの関数も取得した文字列のメモリポインタだけを返すのでlstrcpy()関数を使って
メモリポインタから文字列を取得しています。

実行中の様子


'フルパス名からファイル名のみを取り出す
Private Declare Function PathFindFileName Lib "shlwapi.dll" Alias "PathFindFileNameA" _
    (ByVal pPath As String) As Long
'文字列のメモリポインタから文字列を取得する
Private Declare Function lstrcpy Lib "kernel32.dll" _
    (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
'文字列のポインタから文字列のバイト数を取得する
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" _
    (ByVal lpString As Any) As Long
'フルパスか名から拡張子のみを取り出す
Private Declare Function PathFindExtension Lib "shlwapi.dll" Alias "PathFindExtensionA" _
    (ByVal pPath As String) As Long

Private Sub Form_Load() Dim temp As String, pPoint As Long, rc, FileName As String Me.Text1(0).Text = "c:\windows\notepad.exe" FileName = Me.Text1(0).Text temp = String(256, Chr(0)) 'ファイル名の抜き出し pPoint = PathFindFileName(FileName) 'ファイル名を取得 rc = lstrlen(pPoint) '文字数を取得 Call lstrcpy(temp, pPoint) '文字をポインタから取得 Me.Text1(1).Text = temp '拡張子の抜き出し pPoint = PathFindExtension(FileName) '拡張子を取得 rc = lstrlen(pPoint) '文字数を取得 Call lstrcpy(temp, pPoint) '文字をポインタから取得 Me.Text1(2).Text = temp End Sub
ダウンロード