Getting a Relative out of an Absolute Path
The managed way:
Dim u1 As New Uri("C:\WINDOWS\SYSTEM32\TEST\FOO")
Dim u2 As New Uri("C:\WINDOWS")
Dim s1 As String = u1.MakeRelative(u2)
Dim s2 As String = u2.MakeRelative(u1)
The unmanaged way:
Private Declare Auto Function PathRelativePathTo Lib "shlwapi.dll" ( _
ByVal pszPath As String, _
ByVal pszFrom As String, _
ByVal dwAttrFrom As Int32, _
ByVal pszTo As String, _
ByVal dwAttrTo As Int32 _
) As Int32
Private Const FILE_ATTRIBUTE_DIRECTORY As Int32 = &H10
Private Const MAX_PATH As Int32 = 260
Private Sub Test()
Dim s1 As String = "C:\WINDOWS\SYSTEM32\TEST\FOO"
Dim s2 As String = "C:\WINDOWS"
Dim Buffer As String = Space(MAX_PATH)
PathRelativePathTo( _
Buffer, _
s1, _
FILE_ATTRIBUTE_DIRECTORY, _
s2, _
FILE_ATTRIBUTE_DIRECTORY _
)
MsgBox(Buffer.Substring(1, Buffer.IndexOf(ControlChars.NullChar) - 1))
End Sub