Prerequisites |
Version 4.71 and later of Shlwapi.dll. |
|
Windows
Shlwapi.dll exposes a great number of path-oriented functions designed for use by the Windows shell. For more information on the shell
APIs please see PathFileExists: A Local/Network File/Folder/Drive Exists Routine.
The PathIsSameRoot API compares two paths to determine if they have a
common root component. Two paths are passed, and the function returns True if both strings have the same root component. The target paths do
not have to exist for this call. The illustration shows the result of the call when each path/filename was compared to "c:\abc.txt".
In order to show a complete demo using a combination of path and file
strings representing typical application needs, each demo uses the same 26 strings as its test bed. This provides the opportunity to see
exactly how each category of path information is handled by a specific call, as well as provide a single test bed upon which you can reuse
the form while building a BAS module that contains just the functions you need.
To create the environment to test these routines, I created a folder
on C:\ called 'coolfocus', which contained a subfolder named javatools. In the javatools folder I placed a file named 'somefile.txt'. I also
placed a copy of the somefile.txt in the c:\ root folder. I shared the coolfocus folder, and mapped a drive to it (drive m).
The form code below creates and labels the controls appropriate for
this demo by just placing a single text box and label on the form, and setting the index of each to 0 in order to create a control array. |
|
BAS
Module Code |
|
Place the following code into the general declarations
area of a bas module: |
|
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
' applications, but you may not reproduce
' or publish this code on any web site,
' online service, or distribute as source
' on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare Function PathIsSameRoot Lib "shlwapi" _
Alias "PathIsSameRootA" _
(ByVal pszPath1 As String, _
ByVal pszPath2 As String) As Long
Public Function PathsHaveSameRoot(ByVal sPath1 As String, _
ByVal sPath2 As String) As Boolean
'Compares two paths to determine if
'they have a common root component.
PathsHaveSameRoot = PathIsSameRoot(sPath1, sPath2) = 1
End Function |
|
Form
Code |
|
Add one label (Label1), one text box (Text1) to a form. Set
the index property of each to 0 to create control arrays; the demo load event code will create and label the needed controls. Add a command
button (Command1), along with the following code: |
|
Option Explicit
Private Sub Form_Load()
Dim cnt As Long
For cnt = 0 To 25
If cnt > 0 Then
Load Label1(cnt)
Load Text1(cnt)
End If
With Label1(cnt)
.Left = 300
.Top = 250 + (300 * cnt)
.Visible = True
End With
With Text1(cnt)
.Left = 3500
.Top = 210 + (300 * cnt)
.Width = 1000
.Visible = True
End With
Next
With Command1
.Left = 300
.Top = Text1(25).Top + (Text1(18).Height * 1.5)
.Width = 1935
.Caption = "PathsHaveSameRoot"
End With
'display the strings that will be used in the call
'file only
Label1(0).Caption = "somefile.txt"
'absolute paths
Label1(1).Caption = "c:\"
Label1(2).Caption = "c:\somefile.txt"
Label1(3).Caption = "c:\javatools\"
Label1(4).Caption = "c:\javatools\somefile.txt"
'relative paths
Label1(5).Caption = "..\..\"
Label1(6).Caption = "..\..\somefile.txt"
Label1(7).Caption = "..\..\javatools\"
Label1(8).Caption = "..\..\javatools\somefile.txt"
'mapped drive
Label1(9).Caption = "m:\"
Label1(10).Caption = "m:\somefile.txt"
Label1(11).Caption = "m:\javatools\"
Label1(12).Caption = "m:\javatools\somefile.txt"
'UNC
Label1(13).Caption = "\\workstation"
Label1(14).Caption = "\\workstation\somefile.txt"
Label1(15).Caption = "\\workstation\javatools"
Label1(16).Caption = "\\workstation\javatools\somefile.txt"
'IP address
Label1(17).Caption = "\\192.168.1.100"
Label1(18).Caption = "\\192.168.1.100\somefile.txt"
Label1(19).Caption = "\\192.168.1.100\d$"
Label1(20).Caption = "\\192.168.1.100\d$\javatools\"
Label1(21).Caption = "\\192.168.1.100\d$\javatools\somefile.txt"
'URL
Label1(22).Caption = "ms.htm"
Label1(23).Caption = "www.microsoft.com"
Label1(24).Caption = "http://www.microsoft.com"
Label1(25).Caption = "http://www.microsoft.com/ms.htm"
End Sub
Private Sub Command1_Click()
'Compares two paths to determine if
'they have a common root component.
'For simplicity, "c:\abc.txt" is used
'as the comparison path.
'as filename alone
Text1(0).Text = PathsHaveSameRoot(Label1(0).Caption, "c:\abc.txt")
'via absolute path
Text1(1).Text = PathsHaveSameRoot(Label1(1).Caption, "c:\abc.txt")
Text1(2).Text = PathsHaveSameRoot(Label1(2).Caption, "c:\abc.txt"))
Text1(3).Text = PathsHaveSameRoot(Label1(3).Caption, "c:\abc.txt"))
Text1(4).Text = PathsHaveSameRoot(Label1(4).Caption, "c:\abc.txt")
'via relative path
Text1(5).Text = PathsHaveSameRoot(Label1(5).Caption, "c:\abc.txt")
Text1(6).Text = PathsHaveSameRoot(Label1(6).Caption, "c:\abc.txt")
Text1(7).Text = PathsHaveSameRoot(Label1(7).Caption, "c:\abc.txt")
Text1(8).Text = PathsHaveSameRoot(Label1(8).Caption, "c:\abc.txt")
'via mapped drive
Text1(9).Text = PathsHaveSameRoot(Label1(9).Caption, "c:\abc.txt")
Text1(10).Text = PathsHaveSameRoot(Label1(10).Caption, "c:\abc.txt")
Text1(11).Text = PathsHaveSameRoot(Label1(11).Caption, "c:\abc.txt")
Text1(12).Text = PathsHaveSameRoot(Label1(12).Caption, "c:\abc.txt")
'via UNC
Text1(13).Text = PathsHaveSameRoot(Label1(13).Caption, "c:\abc.txt")
Text1(14).Text = PathsHaveSameRoot(Label1(14).Caption
Text1(15).Text = PathsHaveSameRoot(Label1(15).Caption, "c:\abc.txt")
Text1(16).Text = PathsHaveSameRoot(Label1(16).Caption, "c:\abc.txt")
'via IP address
Text1(17).Text = PathsHaveSameRoot(Label1(17).Caption, "c:\abc.txt")
Text1(18).Text = PathsHaveSameRoot(Label1(18).Caption, "c:\abc.txt")
Text1(19).Text = PathsHaveSameRoot(Label1(19).Caption, "c:\abc.txt")
Text1(20).Text = PathsHaveSameRoot(Label1(20).Caption, "c:\abc.txt")
Text1(21).Text = PathsHaveSameRoot(Label1(21).Caption, "c:\abc.txt")
'via URL
Text1(22).Text = PathsHaveSameRoot(Label1(22).Caption, "c:\abc.txt")
Text1(23).Text = PathsHaveSameRoot(Label1(23).Caption, "c:\abc.txt")
Text1(24).Text = PathsHaveSameRoot(Label1(24).Caption, "c:\abc.txt")
Text1(25).Text = PathsHaveSameRoot(Label1(25).Caption, "c:\abc.txt")
End Sub
|
|
Comments |
|
|