Logo

Hacker’s Guide to Visual FoxPro
An irreverent look at how Visual FoxPro really works. Tells you the inside scoop on every command, function, property, event and method of Visual FoxPro.

SET PATH, Set(“Path”)

This command lets you specify a series of directories that FoxPro should search when you ask for a file. Although it serves the same purpose, it’s not connected to the DOS search path.

Usage

SET PATH TO [ ListOfDirectories ]
cCurrentPath = SET( "PATH" )

You can have a default path stored in the Registry. Just specify a path and bring up the Tools-Options dialog (or specify the path in the File Locations tab there). Choose Set as Default, and the specified path (along with anything else you’ve changed) is saved. When you start Visual FoxPro, that path is already set.

As with so many of the SET commands, you can omit the parameter to reset the path. However, it gets reset to empty, not to the stored default. Resetting to the saved path requires you to issue the SYS(3056) function, which resets all the settings stored in the Tools-Options dialog—that’s a little severe. Bottom line: Be sure to save the current path before you start fiddling if it’s important to you.

The list of directories is a little strange. It’s a comma-delimited or semicolon-delimited list—in fact, you can mix the separators. But it’s never checked for validity. You can SET PATH TO any sort of garbage at all and FoxPro never blinks.

To make things more complicated, you can use a macro (&) or indirect reference (parens) to set the path to the list of directories contained in a string. But you can’t use EVAL()—you get an error message in VFP 5 and VFP 6. (In VFP 3, if you SET PATH TO EVAL(cList), then check SET(“PATH”), you’ll see that FoxPro took you literally and set the path to “EVAL(cList)”—not quite what you had in mind.)

When you use a macro or indirect reference, you can’t put anything that needs to be evaluated in the list. For example, the following:

cList = "C:\WINDOWS,SYS(2004)"
SET PATH TO (cList)

results in a path of:

C:\WINDOWS,SYS(2004)

Even using a macro instead of indirect reference has the same result. To get the desired effect, you have to make sure the function is evaluated before you get to the SET PATH line:

cList = "C:\WINDOWS,"+SYS(2004)
SET PATH TO (cList)

Unless there’s only one directory in the list, you can’t include the function call right in the SET PATH line.

To our utter astonishment, SET PATH can handle directories with embedded spaces without having to surround them with quotes. We had no problem SETting PATH TO C:\Program Files (perhaps our least favorite directory ever). It kind of makes sense, since SET PATH doesn’t see a space as a delimiter, but it sure is different than the way VFP handles embedded spaces elsewhere.

Example

SET PATH TO C:\WINDOWS, F:\VFP
? SET("PATH")   && Returns "C:\WINDOWS,F:\VFP"
* Can use function call for one item
SET PATH TO (SYS(2004) + "\DATA")
* But the following DOESN'T work as you'd expect
SET PATH TO (SYS(2004) + "DATA"), C:\WINDOWS
* Do it this way instead
cList = (SYS(2004) + "DATA")+", C:\WINDOWS"
SET PATH TO (cList)

See Also

ChDir, FullPath(), Set Default, SYS(3056)