Visual Basic File API Routines
PathRemoveFileSpec: Remove Trailing Filename/Backslash from Path
     
Posted:   Wednesday April 25, 2001
Updated:   Monday December 26, 2011
     
Applies to:   VB4-32, VB5, VB6
Developed with:   VB6, Windows 2000
OS restrictions:   Windows XP
Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later)
Windows 98 (or Windows 95 with Internet Explorer 4.0 or later)
Author:   VBnet - Randy Birch
     

Related:  

PathMatchSpec: Searches a String Using MS-DOS Wild-Card Match
PathFindExtension: File Extension from Local/Remote/IP/UNC Filename

PathFindFileName: File Path from Local/Remote/IP/UNC Filename

PathFindNextComponent: Parse File Path Components

PathFindNextComponent: Parse String to Obtain Path Components

PathRemoveExtension: Returns Filename with Extension Removed

PathStripPath: Removes Path Portion of Fully-qualified Path/Filename

PathUnquoteSpaces: Removes Wrapping Quotes from Paths/Filenames

PathStripToRoot: Remove All Parts of a Path Except for Root Information

PathSkipRoot: Parses Path Ignoring Drive or UNC Path

PathStripToRoot: Determine if a Path Contains a Valid Drive Syntax

PathIsSameRoot: Determine if Paths Share Common Root

PathQuoteSpaces: Returns Quoted Path String if Spaces Found
     
 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.

PathRemoveFileSpec removes the trailing file name and backslash from a path, if it has them, returning the unqualified drive and path portion of the string. The call returns nonzero if something was removed, or zero otherwise. The file does not have to exist for this function to succeed.

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 PathRemoveFileSpec Lib "shlwapi" _
   Alias "PathRemoveFileSpecA" _
  (ByVal pPath As String) As Long  


Public Function GetPathPart(ByVal sPath As String) As String

  'Removes the trailing file name and
  'backslash from a path, if it has them.
  'If needed, the call returns nonzero if
  'something was removed, or zero otherwise.
  '
  'Requires Version 4.71 and later of Shlwapi.dll

   Call PathRemoveFileSpec(sPath)
   GetPathPart = TrimNull(sPath)

End Function


Private Function TrimNull(item As String)

   Dim pos As Integer
   
   pos = InStr(item, Chr$(0))
   
   If pos Then
      TrimNull = Left$(item, pos - 1)
   Else
      TrimNull = item
   End If
   
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 = 120
         .Top = 250 + (300 * cnt)
         .Visible = True
      End With
      
      With Text1(cnt)
         .Left = 3300
         .Top = 210 + (300 * cnt)
         .Width = 2300
         .Visible = True
      End With
            
   Next
   
   With Command1
      .Left = 120
      .Top = Text1(25).Top + (Text1(18).Height * 1.5)
      .Width = 1935
      .Caption = "GetPathPart"
   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:\coolfocus\"
   Label1(12).Caption = "m:\coolfocus\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()

  'Given a path and filename, return
  'only the filename portion.
   
  'as filename alone
   Text1(0).Text = GetPathPart(Label1(0).Caption)
  
  'via absolute path
   Text1(1).Text = GetPathPart(Label1(1).Caption)
   Text1(2).Text = GetPathPart(Label1(2).Caption)
   Text1(3).Text = GetPathPart(Label1(3).Caption)
   Text1(4).Text = GetPathPart(Label1(4).Caption)
  
  'via relative path
   Text1(5).Text = GetPathPart(Label1(5).Caption)
   Text1(6).Text = GetPathPart(Label1(6).Caption)
   Text1(7).Text = GetPathPart(Label1(7).Caption)
   Text1(8).Text = GetPathPart(Label1(8).Caption)
      
  'via mapped drive
   Text1(9).Text = GetPathPart(Label1(9).Caption)
   Text1(10).Text = GetPathPart(Label1(10).Caption)
   Text1(11).Text = GetPathPart(Label1(11).Caption)
   Text1(12).Text = GetPathPart(Label1(12).Caption)
  
  'via UNC
   Text1(13).Text = GetPathPart(Label1(13).Caption)
   Text1(14).Text = GetPathPart(Label1(14).Caption)
   Text1(15).Text = GetPathPart(Label1(15).Caption)
   Text1(16).Text = GetPathPart(Label1(16).Caption)
   
  'via IP address
   Text1(17).Text = GetPathPart(Label1(17).Caption)
   Text1(18).Text = GetPathPart(Label1(18).Caption)
   Text1(19).Text = GetPathPart(Label1(19).Caption)
   Text1(20).Text = GetPathPart(Label1(20).Caption)
   Text1(21).Text = GetPathPart(Label1(21).Caption)
   
  'via URL
   Text1(22).Text = GetPathPart(Label1(22).Caption)
   Text1(23).Text = GetPathPart(Label1(23).Caption)
   Text1(24).Text = GetPathPart(Label1(24).Caption)
   Text1(25).Text = GetPathPart(Label1(25).Caption)
   
End Sub
 Comments

 
 

PayPal Link
Make payments with PayPal - it's fast, free and secure!

 
 
 
 

Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved.
Terms of Use  |  Your Privacy

 

Hit Counter