Visual Basic File API Routines
PathIsNetworkPath: Determine if Path is Local
Posted:   Saturday April 07, 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


PathFileExists: A Local/Network File/Folder/Drive Exists Routine
PathIsDirectoryEmpty: Test for Empty Directories

PathIsFileSpec: Test to Determine if String Meets Valid File Spec

PathIsDirectory: Routine To Determine if Path is A Folder

PathIsRoot: Determine if Path is Directory Root

PathIsLFNFileSpec: Determine if Filename is in Long Format

PathIsNetworkPath: Determine if Path is Local

PathIsNetworkPath: Determine if Path Represents a Network Resource

PathIsRelative: Test if Path is Relative vs. Absolute

PathIsUNCServerShare: Determine if String is Valid UNC Share Path

PathIsUNCServer: Determine if String is Valid UNC Server Path Only

PathIsUNC: Determine if String is Valid UNC Server/Share Path

PathIsURL: Determine if String is Valid URL Format
Version 5.00 and later of Shlwapi.dll.

Windows Shlwapi.dll exposes a  great number of path-oriented functions designed for use by the Windows shell. This series of pages shows how to call these APIs, as well as the variety of results that each may return when passed one of several different file and path combinations. Each demo wraps the API into a callable function, which either return True, False or a string, as appropriate.

This page shows how to call the PathIsNetworkPath API. The target does not have to exist for this function. The call returns false if the path is not a network path (the path is local). The routine flips this around so the call is to PathIsLocalPath, returning true.

Not all of the Shlwapi.dll path APIs are appropriate to all types of file and path data that can be passed.  The illustrations for each method shows the typical return results when passed a variety of strings that represent:

  • a filename alone
  • drive, file, folder and file as absolute paths
  • drive, file, folder and file as relative paths
  • drive, file, folder and file as mapped drives
  • drive, file, folder and file as UNC paths
  • with paths containing an IP address
  • as a URL

The path functions themselves can be broken down into five basic categories (the names listed below are my wrapper function names on subsequent pages, and represent only a few of the 46 pages of path functions):

  • 'Is" routines, which determine specific attributes of the passed string, i.e. IsDirectoryEmpty, IsPathARoot, IsPathAFolder, IsPathRelative, IsUNCPathValid, etc.
  • String routines, which parse or test specific parts of the path, such as HasValidDrive, GetExtensionPart, FileExists, ChangeFileExtension etc.
  • Display routines, such as PathRemoveDecoration, GetCompactedPath, ChangePathCase.
  • Validity routines ... IsPathChrValid, SetPathBackslash
  • Helper routines ... ChangePathToEnvironment, PathAppend, PathCombine, GetArgsFromPath, GetDriveFromDriveNumber

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).

A few of the path APIs (like the one detailed on this page) deal with actual paths, so requires that the file or path passed to the routine actually exist on the drive. But since the majority of the path functions deal with comparison and path syntax, they return the proper values whether the paths actually exist or not. This will become clearer in some of the other path demos.

The form code below creates and labels the controls appropriate for this demo by just placing a single text and label on the form, setting both to create a control array. And although each of the path functions generally target a specific type of path statement (ie target URLs, or shares, etc), each demo reuses the same 26 file/path strings.

 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 PathIsNetworkPath Lib "shlwapi" _
   Alias "PathIsNetworkPathA" _
  (ByVal pszPath As String) As Long  
Public Function PathIsLocalPath(ByVal sPath As String) As Boolean

  'Determines whether a path string
  'represents a local resource. Returns
  'True (1) if the string represents a
  'local resource, or False otherwise.

  'PathIsNetwork interprets two types of
  'paths as network paths:

  '  Paths that begin with two backslash
  '  (\) characters are interpreted as UNC paths.
  '  Paths that begin with a letter followed
  '  by a colon (:) are interpreted as a mounted
  '  network drive.

  'The path is not checked to see if it refers
  'to an actual network server.
   PathIsLocalPath = PathIsNetworkPath(sPath) = False

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 Text1(cnt)
         .Left = 300
         .Top = 210 + (300 * cnt)
         .Width = 700
         .Text = "text1 " & CStr(cnt)
         .Visible = True
      End With
      With Label1(cnt)
         .Left = 1200
         .Top = 250 + (300 * cnt)
         .Caption = "label1 " & CStr(cnt)
         .Visible = True
      End With
   With Command1
      .Left = 300
      .Top = Text1(25).Top + (Text1(25).Height * 1.5)
      .Width = 2300
      .Caption = "PathIsLocalPath"
   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"
   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 = "\\"
   Label1(18).Caption = "\\\somefile.txt"
   Label1(19).Caption = "\\\d$"
   Label1(20).Caption = "\\\d$\javatools\"
   Label1(21).Caption = "\\\d$\javatools\somefile.txt"
   Label1(22).Caption = "ms.htm"
   Label1(23).Caption = ""
   Label1(24).Caption = ""
   Label1(25).Caption = ""
End Sub

Private Sub Command1_Click()

  'Parses a path to determine if it
  'is a directory root. The path does
  'not have to exist.
  'as filename alone
   Text1(0).Text = PathIsLocalPath("somefile.txt")
  'via absolute path
   Text1(1).Text = PathIsLocalPath("c:\")
   Text1(2).Text = PathIsLocalPath("c:\somefile.txt")
   Text1(3).Text = PathIsLocalPath("c:\javatools\")
   Text1(4).Text = PathIsLocalPath("c:\javatools\somefile.txt")
  'via relative path
   Text1(5).Text = PathIsLocalPath("..\..\")
   Text1(6).Text = PathIsLocalPath("..\..\somefile.txt")
   Text1(7).Text = PathIsLocalPath("..\..\javatools\")
   Text1(8).Text = PathIsLocalPath("..\..\javatools\somefile.txt")
  'via mapped drive
   Text1(9).Text = PathIsLocalPath("m:\")
   Text1(10).Text = PathIsLocalPath("m:\somefile.txt")
   Text1(11).Text = PathIsLocalPath("m:\coolfocus\")
   Text1(12).Text = PathIsLocalPath("m:\coolfocus\somefile.txt")
  'via UNC
   Text1(13).Text = PathIsLocalPath("\\workstation")
   Text1(14).Text = PathIsLocalPath("\\workstation\somefile.txt")
   Text1(15).Text = PathIsLocalPath("\\workstation\javatools")
   Text1(16).Text = PathIsLocalPath("\\workstation\javatools\somefile.txt")
  'via IP address
   Text1(17).Text = PathIsLocalPath("\\")
   Text1(18).Text = PathIsLocalPath("\\\somefile.txt")
   Text1(19).Text = PathIsLocalPath("\\\d$")
   Text1(20).Text = PathIsLocalPath("\\\d$\javatools")
   Text1(21).Text = PathIsLocalPath("\\\d$\javatools\somefile.txt")
   'via URL
   Text1(22).Text = PathIsLocalPath("ms.htm")
   Text1(23).Text = PathIsLocalPath("")
   Text1(24).Text = PathIsLocalPath("")
   Text1(25).Text = PathIsLocalPath("")

End Sub


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