A path (or filepath, file path, pathname, or similar) is a string that uniquely identifies an item in a hierarchical file system. Generally, a path is composed of directory names, special format specifiers, and optionally a filename, all separated by delimiters. This delimiter can vary by operating system, but popular, modern systems use the slash , backslash , or colon .

The case-sensitivity of individual path components will vary based on operating system, or based on options specified at the time of a file system's creation or first use. In practice, this means that for a case-sensitive system, path components named and can coexist at the same level in the hierarchy, whereas for a case-insensitive file system, they cannot (an error will occur). macOS and Windows' native file systems are case-insensitive by default, whereas typical Linux file systems are case-sensitive.

A path can be either relative or absolute. A relative path is a path in relation to another, most often the working directory. An absolute path indicates a location regardless of the current directory; that is, it specifies all path components starting from the file system's root, and does not depend on context like a relative path does.

Paths are also essential for locating hierarchically-organized network resources, as seen in URLs and UNC paths.

History

Multics first introduced a hierarchical file system with directories (separated by ">") in the mid-1960s.

Around 1970, Unix introduced the slash as its directory separator.

Summary of systems

<!--

Pathing is more a feature of the file system; not the OS or the shell, but this table focuses on OS and shell :(

-->

The following table describes the syntax of paths in notable operating systems:

{| class="wikitable mw-collapsible mw-collapsed col3center col4center col5center col6center" style="font-size: 90%;"

|-

! System

! Root dir.

! Path delim.

! Working dir.

! Parent dir.

! Home dir.

! Examples

|-

! Unix and Unix-like systems, including macOS

|

|

|

|

|

| <br><br><br>

|-

! Windows, Command Prompt

| (relative to current working directory root)<br>or <br>or <br>or <br>or UNC

| <br>or

|

|

|

| <br>

<br><br>

|-

! PowerShell

| <br>or <br>or <br>or UNC

| <br>or

|

|

|

| <br><br><br><br>

|-

!UNC

|

|

|

|

|

|

|-

! DOS, COMMAND.COM

| <br>or

|

|

|

|

| <br><br>

|-

! OS/2

| <br>or

| <br>or

|

|

|

| <br><br>

|-

! RSX-11 MCR

|

|

|

|

|

|

|-

! TOPS-20 DCL

|

|

|

|

|

|

|-

! OpenVMS DCL

| <br>or

|

|

|

| <small></small>

| <br><br><br><br>

|-

! ProDOS AppleSoft BASIC

|

|

|

|

|

|

|-

! AmigaOS Amiga CLI / AmigaShell

|

|

| empty string

|

|

| <br><br><br>

|-

! RISC OS ShellCLI

|

|

|

|

|

| <br><br><br><br><br><br>

|-

! Symbian OS File manager

|

|

|

|

|

|

|-

! Domain/OS Shell

| (root of domain)<br>or (root of current node)

|

|

|

|

| <br><br><br>

|-

! MenuetOS CMD

|

|

|

|

|

|

|-

! Stratus VOS CLI

|

|

|

|

|

|

|-

! NonStop<br>Kernel TACL

|

|

|

|

|

| <br><br>

|-

! CP/M CCP

|

| colspan="4" |no subdirectories, only user areas 0–F

|

|-

! GS/OS

| <br>or<br>or

| <br>or

|

|

|

| <br><br>

|-

!OpenHarmony exec, Oniro, including HarmonyOS

|<br>or

|

|

|

|

|

|}

In programming languages

Most programming languages use the path representation of the underlying system, but some may also be system-independent. Some functions preclude the need for the separator entirely.

:<syntaxhighlight lang="java">import java.io.File;

import java.nio.file.Path;

import java.nio.file.Paths;

// ...

File file = new File("path" + File.separator + "file.txt");

Path path = Paths.get("path", "file.txt");

</syntaxhighlight>

  • In Python, the module offers system-independent path operations.

:<syntaxhighlight lang="python">from pathlib import Path

with (Path("path") / "to" / "file.txt").open() as open_file:

...

</syntaxhighlight>

In Unix

Most Unix-like systems use a similar syntax. POSIX allows treating a path beginning with two slashes in an implementation-defined manner, though in other cases systems must treat consecutive slashes as one.

Many applications on Unix-like systems (for example, scp, rcp, and rsync) use resource definitions such as , or URI schemes with the service name (here 'smb'), like . for example, the HFS+ file system, from the classic Mac OS, converts colons in file names to slashes and, when reading a directory, converts slashes in filenames to colons, and the Carbon toolkit converts colons in pathnames to slashes and slashes in path names to colons, and converts them back when providing filenames and pathnames to the caller.

In the Windows API, file I/O functions automatically convert into (except when using the prefix). Paths using standard Windows APIs (dating back to DOS and Win9x), were limited to 260 characters, or less, as defined by the environment variable . For backwards compatibility with legacy applications this limitation was not removed until Windows 10, build 1607, when it could be expanded to 32,767. Windows NT always supported the 32,767 path length internally but only if using Unicode APIs or forcing UNC paths by the prefix.

PowerShell allows slash-interoperability for backwards-compatibility:

<syntaxhighlight lang="powershell">PS C:\>Get-Content -Path "C:/path/to/file.txt"

Here is some text within a file</syntaxhighlight>

Yen/won character error

Japanese and Korean versions of Windows often displayed the '¥' character or the '₩' character instead of the directory separator. This is because while in ANSI codepages, the character at 0x5C was the backslash, and in Japanese and Korean codepages, 0x5C was the yen and won signs, respectively. Therefore, when the character for a backslash was used, other glyphs appeared.

Universal Naming Convention

The Microsoft Universal Naming Convention (UNC, uniform naming convention, or network path), is a syntax to describe the location of a network resource, such as a shared file, directory, or printer. A UNC path has the general form:

When viewed remotely, the "SharedFolder" may have a name different from what a program on the server sees when opening "\SharedFolder". Instead, the SharedFolder name consists of an arbitrary name assigned during creation of the share.

Since UNCs start with two backslashes, and the backslash is also used for escape sequences and in regular expressions, cases of leaning toothpick syndrome may arise. An escaped string for a regular expression matching a UNC begins with 8 backslashes because the string and regular expression both require escaping. This can be simplified by using raw strings, such as in C#, in Python, or in Perl.

See also

Notes

References