|
|
![]() |
|
||
|
|
|||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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.
PathMatchSpec searches a string using a DOS wild card match type. The pszFileParam parameter contains the string to be searched. The pszSpec member is a string with the file type for which to search. For example, to test whether or not pszFileParam is a DOC file, pszSpec should be set to "*.doc". The routine below allows passing ""doc" alone; it will determine if the passed spec required the leading "*." or not. 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 "*.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 PathMatchSpec Lib "shlwapi" _
Alias "PathMatchSpecA" _
(ByVal pszFileParam As String, _
ByVal pszSpec As String) As Long
Public Function HasMatchingFileSpec(ByVal sFile As String, _
ByVal sFileSpec As String) As Boolean
'Searches a string using a DOS
'wild card match type.
Dim pos As Long
If Len(sFileSpec) > 0 Then
If Left$(sFileSpec, 1) <> "*" Then
sFileSpec = "*" & sFileSpec
End If
If Left$(sFileSpec, 2) <> "*." Then
sFileSpec = "*." & sFileSpec
Else
End If
HasMatchingFileSpec = PathMatchSpec(sFile, sFileSpec) = 1
End If
End Function |
| Form Code |
|
|
| To the form, add 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 = "HasMatchingFileSpec"
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()
'Searches a string using a DOS
'wild card match type.
'as filename alone
Text1(0).Text = HasMatchingFileSpec(Label1(0).Caption)
'via absolute path
Text1(1).Text = HasMatchingFileSpec(Label1(1).Caption)
Text1(2).Text = HasMatchingFileSpec(Label1(2).Caption)
Text1(3).Text = HasMatchingFileSpec(Label1(3).Caption)
Text1(4).Text = HasMatchingFileSpec(Label1(4).Caption)
'via relative path
Text1(5).Text = HasMatchingFileSpec(Label1(5).Caption)
Text1(6).Text = HasMatchingFileSpec(Label1(6).Caption)
Text1(7).Text = HasMatchingFileSpec(Label1(7).Caption)
Text1(8).Text = HasMatchingFileSpec(Label1(8).Caption)
'via mapped drive
Text1(9).Text = HasMatchingFileSpec(Label1(9).Caption)
Text1(10).Text = HasMatchingFileSpec(Label1(10).Caption)
Text1(11).Text = HasMatchingFileSpec(Label1(11).Caption)
Text1(12).Text = HasMatchingFileSpec(Label1(12).Caption)
'via UNC
Text1(13).Text = HasMatchingFileSpec(Label1(13).Caption)
Text1(14).Text = HasMatchingFileSpec(Label1(14).Caption)
Text1(15).Text = HasMatchingFileSpec(Label1(15).Caption)
Text1(16).Text = HasMatchingFileSpec(Label1(16).Caption)
'via IP address
Text1(17).Text = HasMatchingFileSpec(Label1(17).Caption)
Text1(18).Text = HasMatchingFileSpec(Label1(18).Caption)
Text1(19).Text = HasMatchingFileSpec(Label1(19).Caption)
Text1(20).Text = HasMatchingFileSpec(Label1(20).Caption)
Text1(21).Text = HasMatchingFileSpec(Label1(21).Caption)
'via URL
Text1(22).Text = HasMatchingFileSpec(Label1(22).Caption)
Text1(23).Text = HasMatchingFileSpec(Label1(23).Caption)
Text1(24).Text = HasMatchingFileSpec(Label1(24).Caption)
Text1(25).Text = HasMatchingFileSpec(Label1(25).Caption)
End Sub |
| Comments |
| 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: |
|
|
|
|
|
|||||
|
|||||
|
|
|||||
|
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |
![]() |