Apath (orfilepath,file path,pathname, or similar) is astring that uniquely identifies an item in ahierarchical file system. Generally, a path is composed of directory names, special format specifiers, and optionally afilename, all separated bydelimiters. This delimiter can vary by operating system, but popular, modern systems use theslash/,backslash\, orcolon:.
Thecase-sensitivity of individual path components will vary based onoperating system, or based on options specified at the time of a file system'screation orfirst use. In practice, this means that for acase-sensitive system, path components namedcomponent1 andComponent1 can coexist at the same level in the hierarchy, whereas for acase-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.[1][2][3]
A path can be eitherrelative orabsolute. A relative path is a path in relation to another, most often theworking directory. An absolute path indicates a location regardless of the current directory; that is, it specifies all path components starting from the file system'sroot, and does not depend on context like a relative path does.
Paths are also essential for locating hierarchically-organized network resources, as seen inURLs andUNC paths.
Multics first introduced ahierarchical file system with directories (separated by ">") in the mid-1960s.[4]
Around 1970,Unix introduced the slash/ as its directory separator.
Originally,MS-DOS did not support directories. When adding the feature, using the Unix standard of a slash was not a good option since many existing commands used a slash as theswitch prefix (i.e.,dir /w). In contrast, Unix uses the dash- as the switch prefix. The backslash\ was ultimately chosen instead for its similarity to the slash and not conflicting with existing commands. This convention continued intoWindows. However, some areas of Windows do accept or understand Unix-style slashes also, such asPowerShell.[5][6]
The following table describes the syntax of paths in notable operating systems:
| System | Root dir. | Path delim. | Working dir. | Parent dir. | Home dir. | Examples |
|---|---|---|---|---|---|---|
| Unix andUnix-like systems, includingmacOS[7] | / | / | . | .. | ~ | /home/user/docs/Letter.txt ./child ../../greatgrandparent ~/.rcinfo |
| Windows,Command Prompt | \ (relative to current working directory root) or[drive letter]:\ or\\.\ or\\?\ or UNC | /[a] or\ | . | .. | C:\user\docs\Letter.txt /user/docs/Letter.txtC:\user\docs\somefile.ext:alternate stream name C:picture.jpg | |
| PowerShell | [drive letter]:/ or[drive name]:\ or[PSSnapIn name]\[PSProvider name]::[PSDrive root] or UNC | /[a] or\ | . | .. | ~ | C:\user\docs\Letter.txt ~\DesktopUserDocs:/Letter.txt Variable:PSVersionTable Registry::HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft.PowerShell.Security\Certificate::CurrentUser\ |
| UNC[8] | \\[server]\[sharename]\ | / | \\Server01\user\docs\Letter.txt | |||
| DOS,COMMAND.COM | [drive letter]:\ or\\[server name]\[volume]\ | \ | . | .. | C:\USER\DOCS\LETTER.TXT A:PICTURE.JPG \\SERVER01\USER\DOCS\LETTER.TXT | |
| OS/2 | [drive letter]:\ or\\[server name]\[volume]\ | / or\ | . | .. | C:\user\docs\Letter.txt A:Picture.jpg \\SERVER01\USER\docs\Letter.txt | |
| RSX-11 MCR[9] | [device name]: | DR0:[30,12]LETTER.TXT;4[b] | ||||
| TOPS-20DCL[10] | [device name]: | . | PS:<USER.DOCS>LETTER.TXT,4 | |||
| OpenVMSDCL[11][12] | [device name]:[000000] or[NODE["accountname password"]]::[device name][000000]: | . | [] | [-] | SYS$LOGIN: | NODE$DISK:[USER.DOCS]PHOTO.JPGUSER:[000000]000000.DIR[]IN_THIS_DIR.COM; [-.-]GreatGrandParent.TXT SYS$SYSDEVICE:[.DRAFTS]LETTER.TXT;4 GEIN::[000000]LETTER.TXT;4 SYS$LOGIN:LOGIN.COM |
| ProDOS AppleSoft BASIC[13] | /[volume or drive name]/ | / | /SCHOOL.DISK/APPLEWORKS/MY.REPORTFLIGHT.SIMULATOR,D2 | |||
| AmigaOS Amiga CLI / AmigaShell[14] | [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[15] | [fs type[#option]:][:drive number or disc name.]$[c] | . | @ | ^ | & | ADFS::MyDrive.$.Documents.Letter Net#MainServer::DataDrive.$.Main.sy10823 LanMan::WindowsC.$.Pictures.Japan/gif NFS:&.!Choices ADFS:%.IfThere @.inthisdir ^.^.greatgrandparent[d] |
| Symbian OS File manager | \ | \ | \user\docs\Letter.txt | |||
| Domain/OS Shell[16] | // (root of domain) or/ (root of current node) | / | . | \ | ~ | //node/home/user/docs/Letter.txt ./inthisdir \\greatgrandparent ~rcinfo |
| MenuetOS CMD | / | / | /file | |||
| Stratus VOS CLI | %[system_name]#[module_name]> | > | < | %sysname#module1>SubDir>AnotherDir | ||
| NonStop Kernel TACL[e] | . | \NODE.$DISK.SUBVOL.FILE \NODE.$DEVICE \NODE.$DEVICE.#SUBDEV.QUALIFIER | ||||
| CP/MCCP[17] | [drive letter:] | no subdirectories, only user areas 0–F | A:LETTER.TXT | |||
| GS/OS | :[volume name]: or.[device name]: or[prefix]:[f] | : or/ | @ | :Apps:Platinum.Paint:Platinum.Paint *:System:Finder .APPLEDISK3.5B/file | ||
| OpenHarmony exec[18][19] | hb set -root [ROOT_PATH] orhb set -p --product [PRODUCT_NAME] | > | ./ | ../ | LOCAL>MEDIA_TYPE_>Download>Letter.txt | |
Most programming languages use the path representation of the underlying system, but some may also be system-independent.
For instance, this C code is system-dependent and may fail on opposing systems:
uxFile=fopen("project/readme.txt","r")// Fails on WindowswinFile=fopen("C:\\Program Files\\bin\\config.bat","r")// Fails on Unix
importjava.io.File;importjava.nio.file.Path;importjava.nio.file.Paths;// ...Filefile=newFile("path"+File.separator+"file.txt");Pathpath=Paths.get("path","file.txt");
frompathlibimportPathwith(Path("path")/"to"/"file.txt").open()asopen_file:...
Most Unix-like systems use a similar syntax.[22]POSIX allows treating a path beginning with two slashes in an implementation-defined manner,[23] though in other cases systems must treat consecutive slashes as one.[24]
Many applications on Unix-like systems (for example,scp,rcp, andrsync) use resource definitions such ashostname:/directorypath/resource, orURI schemes with the service name (here 'smb'), likesmb://hostname/directorypath/resource.
WhenmacOS was being developed, it inherited some pathname choices fromClassic Mac OS and theUnix-likeNeXTSTEP. The classic Mac OS uses a: whileUnix and Unix-like systems use a/ as the path delimiter. As a solution, to preserve compatibility for software and familiarity for users, and to allow disk file systems to be used both by the classic Mac OS and macOS, some portions of macOS convert between colons and slashes in pathnames;[25] 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,[26] as and theCarbon 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.[26]

DOS and Windows have no single root directory; a root exists for each storage drive, indicated with a drive letter or through UNC.
Directory and file name comparisons are case-insensitive: "test.TXT" would match "Test.txt".[27]
Windows understands the following kinds of paths:
C:\File.\\?\C:\File or\\.\UNC\Server\Volume\File. The first,\\?\ skips path normalization. The second,\\.\ uses the raw device namespace.[27][28]In theWindows API, file I/O functions automatically convert/ into\ (except when using the\\?\ prefix). Unless the\\?\ prefix is used, paths are limited to the length defined byMAX_PATH, which is 260.[29]
PowerShell allows slash-interoperability for backwards-compatibility:[30]
PSC:\>Get-Content-Path"C:/path/to/file.txt"Hereissometextwithinafile
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.[31]
The MicrosoftUniversal Naming Convention (UNC,uniform naming convention, ornetwork 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:
\\ComputerName\SharedFolder\Resource
Some Windows interfaces allow or require UNC syntax forWebDAV share access, rather than a URL. The UNC syntax is extended with optional components to denote use of SSL and TCP/IP port number. Thus, the WebDAV URL ofhttps://hostname:443/SharedFolder/Resource becomes\\hostname@SSL@443\SharedFolder\Resource.[32]
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".
Since UNCs start with two backslashes, and the backslash is also used forescape sequences and inregular expressions, cases ofleaning 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 usingraw strings, such as@"\\\\" in C#,r'\\\\' inPython, orqr{\\\\} inPerl.
ddnn:[g,m]:filename.type;version&,%, and@ can also be used to reference the root of the current user, the library, and the current directory respectively. characters are changed to/, as in theJapan/gif example above[prefix] may be a number (0–31), * (boot volume) or@ (AppleShare home directory)Windows file system treats file and directory names as case-insensitive. FOO.txt and foo.txt will be treated as equivalent files. Linux file system treats file and directory names as case-sensitive. FOO.txt and foo.txt will be treated as distinct files.
Case sensitivity in Linux refers to files and directories recognizing differences between lowercase and uppercase characters in filenames. For instance, "File.txt" and "file.txt" would both be treated as two distinct files. This concept is integral to Unix-like operating systems, including Linux.
{{cite book}}: CS1 maint: others (link)