表紙 > VB6 サンプル >

VB6

相対パスを絶対パスに変換する

 

以下の関数AbsolutePathを使用すると相対パスを絶対パスに変換することができる。たとえば、次のように使用する。

MsgBox AbsolutePath("C:\Windows\System32\..\Notepad.exe")

この場合、は C:\Windows\Notepad.exe と表示される。ファイル名だけではなくフォルダ名も変換することができる。

メモ:ここでは相対パスとはパス文字列中に \..\ が含まれているパスを言います。

VB6対応 

Private Declare Function PathCanonicalize Lib "shlwapi.dll" Alias "PathCanonicalizeA" (ByVal lpszDst As String, ByVal lpszSrc As String) As Long

Public Const MAX_PATH = 260 'パス名の最大長

'■AbsolutePath
'■機能:相対パスを絶対パスに変換する
'■ 引数が相対パスでない場合はそのまま引数を返す。
'■ 相対パスか否かの判断は "\..\" が含まれるかどうか。

Public Function AbsolutePath(Path As String) As String

    Dim Buffer As String * MAX_PATH

    If InStr(1, Path, "\..\") = 0 Then
        AbsolutePath = Path
        Exit Function
    End If


    Buffer = String(Len(Buffer), vbNullChar) ' 絶対パスを受け取る文字列を初期化

    Call PathCanonicalize(Buffer, Path)

    AbsolutePath = Left(Buffer, InStr(Buffer, vbNullChar) - 1)

End Function