Image of Navigational Map linked to Home / Contents / Search A Predictable Application Path

Jim Karabatsos - GUI Computing
Image of Line Break

I'm sure most VB programmers are familiar with the App.Path property, which gives us access to the path from which the program was run. Using this property is a convenient way for your program to locate any support files that it needs. Personally, I tend to place any configuration options that do not depend on the particular user (as well as default values) in a private INI file that lives in the program directory, while I place user-specific options in another private INI file in the user's WIN.INI directory (or the Windows 95 registry).

One thing to be aware of is that the App.Path property may or may not have a trailing backslash. In most cases, it will not have a trailing backslash; however, if the program is run from the root directory of a drive, then it will have the trailing backslash. You might think that it is unlikely that your users will install into a root directory, but it is possible - indeed, in the case of a LAN, it is quite common to map a drive letter directly to an application's home directory.

Being obsessed with catering for all possibilities, no matter how unlikely, I wrote a function that returns the application's path in a predictable format. As the most common requirement is to use the path as a root for other filenames, the function returns the path with a trailing backslash in all cases. As part of this process, I also created a function to do the same to any arbitrary string.

Here are the two functions:

  Function sAddBackslashToPath(ByVal sPath_IN As String) _
        As String

    If Right$(sPath_IN,1) = "\" Then
      sAddBackslashToPath = sPath_IN
      sAddBackslashToPath = sPath_IN & "\"
    End If

  End Function

  Function sAppPath() As String

    Static sta_sAppPath As String

    If Len(sta_sAppPath) = 0 Then
      sta_sAppPath = sAddBackslashToPath(App.Path)
    End If

    sAppPath = sta_sAppPath

  End Function

Notice how we are buffering the result of the sAppPath function in a static variable. Whenever you have a function that returns a constant value, you can trade a little bit of memory for better performance. In this case, you save access to the App.Path property in all but the first time this function is used. I know that this is hardly time-critical code, but optimising these library routines has a high return on investment as they are used in many programs we write.

Written by: Jim Karabatsos
November '96

Image of Arrow linked to Previous Article Image of Arrow linked to Next Article
Image of Line Break