This articleneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources. Unsourced material may be challenged and removed. Find sources: "Path" computing – news ·newspapers ·books ·scholar ·JSTOR(July 2008) (Learn how and when to remove this message) |
Apath (orfilepath,file path,pathname, or similar) is atext string that uniquely specifies an item in ahierarchical file system. Generally, a path is composed of directory names, special directory specifiers and optionally afilename, separated bydelimiting text. The delimiter varies by operating system and in theory can be anything, but popular, modern systems useslash/
,backslash\
, or colon:
.
A path can be either relative or absolute. A relative path includes information that is relative to a particular directory whereas an absolute path indicates a location relative to the systemroot directory, and therefore, does not depends on context like a relative path does. Often, a relative path is relative to theworking directory. For example, in commandls f
,f
is a relative path to the file with that name in the working directory.
Paths are used extensively incomputer science to represent the directory/file relationships common in modern operating systems and are essential in the construction ofuniform resource locators (URLs).
Multics first introduced ahierarchical file system with directories (separated by ">") in the mid-1960s.[1]
Around 1970,Unix introduced the slash character ("/") as its directory separator.
Originally,MS-DOS did not support directories, but when adding the feature, using the Unix standard of slash was not a good option since many existing commands used slash as theswitch prefix. For example,dir /w
. In contrast, Unix uses dash-
as the switch prefix. In this context, MS-DOS version 2.0 used backslash\
for the path delimiter since it is similar to slash but did not conflict with existing commands. This convention continued intoWindows in its shellCommand Prompt. Eventually,PowerShell, was introduced to Windows that is slash-agnostic, allowing the use of either slash in a path.[2][3]
The following table describes the syntax of paths in notable operating systems and with notable aspects by shell.
Context | Root dir | Path delim | Working dir | Parent dir | Home dir | Examples |
---|---|---|---|---|---|---|
Unix | / | / | . | .. | ~ | /home/user/docs/Letter.txt ./inthisdir ../../greatgrandparent ~/.rcinfo |
DOSCOMMAND.COM | [drive letter:]\ or \\[server name]\[volume]\ | \ | . | .. | C:\USER\DOCS\LETTER.TXT A:PICTURE.JPG \\SERVER01\USER\DOCS\LETTER.TXT | |
OS/2cmd.exe | [drive letter:]\ or \\[server name]\[volume]\ | / or \ | . | .. | C:\user\docs\Letter.txt A:Picture.jpg \\SERVER01\USER\docs\Letter.txt | |
WindowsCommand Prompt | \ (relative to current working directory root)or [drive_letter]:\ or \\[server]\[sharename]\ or \\?\[drive_spec]:\ or \\?\UNC\[server]\[sharename]\ or \\.\[physical_device]\ [4] | / or \ | . | .. [5] | C:\user\docs\Letter.txt /user/docs/Letter.txt C:\Letter.txt \\Server01\user\docs\Letter.txt \\?\UNC\Server01\user\docs\Letter.txt \\?\C:\user\docs\Letter.txt C:\user\docs\somefile.ext:alternate stream name ./inthisdir ../../greatgrandparent | |
WindowsPowerShell | [drive letter:]/ or [drive name:]\ or \\[server name]\ or [PSSnapIn name]\[PSProvider name:][:PSDrive root] | / or \ | . | .. | ~ | C:\user\docs\Letter.txt C:\user/docs\Letter.txt \\Server01\user\docs\Letter.txt cd ~\Desktop
|
TOPS-20DCL | [device name:] | . | PS:<USER.DOCS>LETTER.TXT,4 | |||
RSX-11 MCR | [device name:] | DR0:[30,12]LETTER.TXT;4 | ||||
OpenVMSDCL | [device name:][000000] or [NODE["accountname password"]]::[device name][000000]: | . | [] | [-] | SYS$LOGIN: | SYS$SYSDEVICE:[USER.DOCS]PHOTO.JPG
|
Classic Mac OS | [volume or drive name]: | : | : | :: | Macintosh HD:Documents:Letter :fileincurrentdir ::fileinparent :::fileingrandparent | |
ProDOS AppleSoft BASIC | /[volume or drive name]/ | / | /SCHOOL.DISK/APPLEWORKS/MY.REPORT
| |||
AmigaOS Amiga CLI / AmigaShell | [drive, volume, device, or assign name]: | / | empty string | / | Workbench:Utilities/MultiView DF0:S/Startup-Sequence S:Startup-Sequence TCP:en.wikipedia.com/80 | |
RISC OS ShellCLI | [fs type[#option]:][:drive number or disc name.]$ note: &, %, and @ can also be used to reference the root | . | @ | ^ | & | ADFS::MyDrive.$.Documents.Letter Net#MainServer::DataDrive.$.Main.sy10823 LanMan::WindowsC.$.Pictures.Japan/gif NFS:&.!Choices ADFS:%.IfThere @.inthisdir ^.^.greatgrandparent When filesystems with filename extensions are mounted, |
Symbian OS File manager | \ | \ | \user\docs\Letter.txt | |||
Domain/OS Shell |
| / | . | \ | ~ | //node/home/user/docs/Letter.txt ./inthisdir \\greatgrandparent ~rcinfo |
MenuetOS CMD | / | / | ||||
Stratus VOS VOS command-line interpreter | %[system_name]#[module_name]> | > | < | %sysname#module1>SubDir>AnotherDir | ||
NonStop Kernel TACL Tandem Advanced Command Language | No root | . | none | \NODE.$DISK.SUBVOL.FILE \NODE.$DEVICE \NODE.$DEVICE.#SUBDEV.QUALIFIER | ||
CP/MCCP | [drive letter:] | no directory support, just user areas 0–F | A:LETTER.TXT | |||
GS/OS | :[volume name]: or.[device name]: or[prefix]: note: prefix may be a number (0–31), | : or / | @ | :Apps:Platinum.Paint:Platinum.Paint *:System:Finder .APPLEDISK3.5B/file | ||
OpenHarmony (incl.HarmonyOS) exec[6][7] | hb set -root [ROOT_PATH]
| > | ./ | ../ | LOCAL>MEDIA_TYPE_>Download>Letter.txt |
Japanese and Korean versions of Windows often display the '¥' character or the '₩' character instead of the directory separator. In such cases the code for a backslash is being drawn as these characters. Very early versions of MS-DOS replaced the backslash with these glyphs on the display to make it possible to display them by programs that only understood 7-bitASCII (other characters such as the square brackets were replaced as well, seeISO 646,Windows Codepage 932 (Japanese Shift JIS), andCodepage 949 (Korean)). Although even the first version of Windows supported the 8-bitISO-8859-1 character set which has the Yen sign at U+00A5, and modern versions of Windows supportsUnicode which has the Won sign at U+20A9, much software will continue to display backslashes found in ASCII files this way to preserve backward compatibility.[8]
macOS, as a derivative of UNIX, uses UNIX paths internally. However, to preserve compatibility for software and familiarity for users, many portions of the GUI switch "/" typed by the user to ":" internally, and switch them back when displaying filenames (a ":" entered by the user is also changed into "/" but the inverse translation does not happen).
Programming languages also use paths. E.g.: When a file is opened. Most programming languages use the path representation of the underlying operating system:
uxFile = fopen("project/readme.txt", "r")
winFile = fopen("C:\\Program Files\\bin\\config.bat", "r")
This direct access to the operating system paths can hinder the portability of programs. To support portable programsJava usesFile.separator to distinguish between / and \ separated paths.Seed7 has a different approach for the path representation. In Seed7 all paths use the Unix path convention, independent of the operating system. Under windows a mapping takes place (e.g.: The path/c/users is mapped toc:\users).
The Microsoftuniversal naming convention (UNC), a.k.a.uniform naming convention, a.k.a.network path, specifies 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:
\\ComputerName\SharedFolder\Resource
Some Windows interfaces allow or require UNC syntax forWebDAV share access, rather than a URL. The UNC syntax is extended[9] with optional components to denote use of SSL and TCP/IP port number, a WebDAV URL ofhttp[s]://HostName[:Port]/SharedFolder/Resource
becomes
\\HostName[@SSL][@Port]\SharedFolder\Resource
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 to the folder when defining its "sharing".
Some Windows interfaces also accept the "Long UNC":
\\?\UNC\ComputerName\SharedFolder\Resource
Windows uses the following types of paths:
C:\File
\\Server\Volume\File
or /<internet resource name>[\Directory name]
(at least in Windows 7 and later)\\?\C:\File
or\\?\UNC\Server\Volume\File
.[10] This path points to the local file namespace and\\.\
is a similar one that points to the local DOS device namespace. This format is also the "raw" or "uninterpreted" path, since it sends paths straight to the file system without converting/ to\ and interpreting names like...[4]\\??\
-prefixed paths (global DOS namespace).[11][12]In versions of Windows prior to Windows XP, only the APIs that accept "long" device paths could accept more than 260 characters.
Theshell inWindows XP andWindows Vista,explorer.exe, allows path names up to 248 characters long.[citation needed]
Since UNCs start with two backslashes, and the backslash is also used for string escaping and inregular expressions, this can result in extreme cases ofleaning toothpick syndrome: 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 usingraw strings, as in C#'s@"\\\\"
or Python'sr'\\\\'
, or regular expression literals, as in Perl'sqr{\\\\}
.
Most Unix-like systems use a similar syntax.[13]POSIX allows treating a path beginning with two slashes in an implementation-defined manner,[14]though in other cases systems must treat multiple slashes as single slashes.[15]Many applications on Unix-like systems (for example,scp,rcp, andrsync) use resource definitions such as:
hostname:/directorypath/resource
orURI schemes with the service name (here 'smb'):
smb://hostname/directorypath/resource
The following examples are for typical, Unix-based file systems:
Given the working directory is/home/mark/
and it contains subdirectorybobapples
, relative paths to the subdirectory include./bobapples
andbobapples
, and the absolute path is/home/mark/bobapples
. A command to change the working directory to the subdirectory:
$cdbobapples
If the working directory was/home/jo
, then the relative path../mark/bobapples
specifies the subdirectory. The double dots..
indicates a move up the directory hierarchy one level to/home
, the rest indicates moving down tomark
and thenboapples
.
This sectionneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources in this section. Unsourced material may be challenged and removed.(November 2020) (Learn how and when to remove this message) |
TheWindows API accepts slash for path delimiter.
Unlike Unix that always has a single root directory, a Windows file system has a root for each storage drive. An absolute path includes a drive letter or uses the UNC format.
A UNC path (starting with\\?\
) does not support slashes.[4]
A:\Temp\File.txt
is an absolute path that specifies a file namedFile.txt
in the directoryTemp
which is in the root of driveA:
:
C:..\File.txt
is a relative path that specifies fileFile.txt
located in the parent of the working directory on driveC:
:
Folder\SubFolder\File.txt
is a relative path that specifies fileFile.txt
in directorySubFolder
which is in directoryFolder
which is in the working directory of the current drive:
File.txt
is a relative path that specifiesFile.txt
in the working directory:
\\.\COM1
specifies the firstserial port,COM1:
The following uses a path with slashes for directory delimiter:
C:\>more< C:/Windows/system.ini; for 16-bit app support[386Enh]woafont=dosapp.fonEGA80WOA.FON=EGA80WOA.FONEGA40WOA.FON=EGA40WOA.FONCGA80WOA.FON=CGA80WOA.FONCGA40WOA.FON=CGA40WOA.FON...
A path with forward slashes may need to be surrounded by double quotes to disambiguate from command-line switches. For example,dir /windows
is invalid, butdir "/window"
is valid. Andcd
is more lenient by allowingcd /windows
.