BlogFileMaker

New in FileMaker 19: Path Conversion Functions

By May 20, 2020 No Comments

FileMaker File Path Format

FileMaker has long maintained its own file path format used internally to specify locations of external files or FileMaker data sources. The “standard” path formats used by the operating systems have changed over the years, but the FileMaker format has been the same since version 7.0.

In most cases, FileMaker paths can be easily recognized because they begin with one of these prefixes:

File Path Prefix Used For
file: Any data file
image: Image or PDF file
movie: Audio or video file
fmnet: Network path to a FileMaker file

The file/image/movie prefixes can also have an OS extension: mac, win, or linux. Using one of these extensions is optional and is done to explicitly indicate that the path is only intended to be used with that particular OS. Here are some examples of OS-specific FileMaker paths:

filemac:
filelinux:
imagewin:
moviemac:

With one exception, if a path begins with any of the prefixes described above, it is exclusively a FileMaker path. In other words, the operating system won’t know what to do with the path. The exception is paths that begin with file:// (two forwards slashes). Depending on what the rest of the path looks like, this kind of path could be either a FileMaker path or a standard file URL path. You can read more about the standard file URI scheme.

FileMaker Get Functions

FileMaker Get functions that return file paths also use the FileMaker path format, but most of them omit the scheme prefix.

Get ( DesktopPath )
= "/Macintosh HD/Users/mkos/Desktop/"  // on mac
= "/C:/Users/mkos/Desktop/"            // on Windows

The product documentation states that script steps and FileMaker dialog boxes requiring a file path should use a properly formatted FileMaker path (although the paths constructed without a “file:” prefix seem to work just fine).

Screenshot of the 'Specify File' dialog

Figure 1. Specify file for Import Records

But if we want to adhere to the documentation, we can simply add the appropriate prefix – such as file: – to the path. For example:

"file:" & Get ( DesktopPath ) & "my.pdf"

External Systems

Occasionally we have to use a path (that we have constructed within FileMaker) with an external system. One example of this is when a plugin is used to interact with the file system. In this case, we need to provide the plugin with a standard path, not a FileMaker path.

In the past, this involved writing code to convert paths; for example, like this:

"/Macintosh HD/Users/mkos/Desktop/"
⇛ "/Users/mkos/Desktop/"

"/C:/Users/mkos/Desktop/"
⇛ "C:\Users\mkos\Desktop\"

This extra step was a bit inconvenient, but in most cases, it didn’t pose problems. However occasionally, when the environments that had to be supported included different operating systems, remote volumes, and other complicating factors, the task of converting paths would become rather tricky.

Path Conversion Functions

FileMaker 19 introduces two new functions that accomplish this conversion for us:

ConvertToFileMakerPath ( standardPath ; format )

ConvertFromFileMakerPath ( filemakerPath ; format )

A few comments on the function parameters:

  • standardPath is the operating system path that needs to be converted to a FileMaker path
  • format can be one of the following: PosixPath, WinPath, or URLPath
  • PosixPath is the path format used by Unix-like operating systems such as macOS and Linux
  • WinPath is the path format used by Windows
  • URLPath is the path format used by web-based systems

The three format options are constants and evaluate as follows:

  • PosixPath = 1
  • WinPath = 2
  • URLPath = 3

Conveniently, the values for PosixPath and WinPath correspond to the value returned by Abs ( Get ( SystemPlatform ) ) when evaluated on a mac or a Windows computer.

Putting it all together, now we can easily convert a FileMaker path for use with an external system:

ConvertFromFileMakerPath ( 
	Get ( DesktopPath ) & "my.pdf" ; 
	Abs ( Get ( SystemPlatform ) ) 
)
= "/Users/kos/Desktop/my.pdf"

Similarly, we can go in the other direction as well:

ConvertToFileMakerPath ( "/Users/kos/Desktop/my.pdf" ; PosixPath )
= "file:/Macintosh HD/Users/kos/Desktop/my.pdf"

However, we need to be cautious when converting to FileMaker paths because standard paths are platform-specific. Even if we were to replace forward slashes with backslashes, the “/Users/kos/Desktop/my.pdf” path simply wouldn’t make sense in a Windows environment. As a result, if we try to convert this path using WinPath, the result will be “?”. So, as always, make sure to include error handling in your code by checking for “?”.

Demo File

I have put together a very simple demo file to help you along as you learn and experiment with the new functions.

Screenshot from the FileMaker Path Conversion Demo file

Figure 2. FileMaker Path Conversion Demo

Download the demo file.

Next Steps in FileMaker 19

Path Conversion Functions is just one of many FileMaker 19 features our team has been exploring. If you have any questions on the platform’s new functionality, please feel free to contact our team.

Mislav Kos

Mislav Kos

Mislav is a FileMaker developer and a Technical Solution Architect at Soliant Consulting.

Leave a Reply

Need to adjust your business processes quickly? We're helping clients use technology to keep their teams productive and running smoothly in these times of uncertainty. Our team can guide yours if you need help in these areas.

Talk to a Consultant