Skip to content

路径简介

路径(Path)是一个字符串,用于唯一标识目录结构中的位置。它遵循目录树层次结构,其中由分隔符分隔的组件来标识目录中的节点。

历史

1960 年代的 Multics 项目中首次引入了带有目录(使用 > 来作为分隔符)的分层文件系统。

1970 年代出现的 Unix 继承了 Multics 的大部分遗产,但是引入了斜杠 / 作为起目录分隔符,而 Linux 和 MacOS 都继承了这一点。

1981 年的 MS-DOS 1.0 并不支持文件目录,并且他的命令支持一种 dir /w 这样的开关参数语法(继承自 IBM)。之后的 2.0 版本中 MS-DOS 添加了目录支持,而由于 / 作为开关参数前缀,为了实现向后兼容性他使用了反斜杠 \ 来作为目录分隔符。

绝对路径和相对路径

要理解绝对路径和相对路径需要知道两个概念:

  • 根目录(root directory): 目录树层次结构的最顶层目录,类 Unix 下就是 /,Windows 中每个分区具有自己的根目录(即没有统一的根目录),因此需要携带驱动器号因此完整的就是 C:\
  • 工作目录(Working directory): 与进程关联的目录,其中 cd 这样的命令就是更改工作目录的。大多数操作系统中 . 表示当前工作目录,.. 表示工作目录的父目录

所谓的绝对路径就是完整指向文件系统中一个位置的路径,他必须包含根目录。而相对路径必须基于某个给定的工作目录开始,如果工作目录更改相对目录指向的位置也会发生更改。

常见 URL 介绍

操作系统 Shell 根目录 目录分隔符 当前目录 父目录 家目录 示例
类 Unix sh / / . .. ~ /home/user/docs/Letter.txt/../../test.txt/~/.rcinfo
WIndows cmd [drive_letter]:\/\\[server]\[sharename]\ \ or / . .. C:\user\doc\Letter.txt/../../test.txt/\\Server01\user\docs\Letter.txt
WIndows powershell [drive_letter]:\/\\[server]\[sharename]\ \ or / . .. ~ C:\user\doc\Letter.txt/../../test.txt/\\Server01\user\docs\Letter.txt

Note

\\[server]\[sharename]\ 是 Windows UNC,用于描述网络资源,主要就是 smb 协议共享的网络资源。还有一种方案是 smb://hostname/directory/source 这样的形式

编程语言中的路径

大多数编程语言都是用底层操作系统的路径表示形式:

C
uxFile = fopen("project/readme.txt", "r")

winFile = fopen("C:\\Program Files\\bin\\config.bat", "r")

但是这种情况通常会阻碍程序的可移植性,因此通常也会提供类似 File.separator 来在不同操作系统中返回 /\。而对于 windows 这样的 C:\ 的形式通常会使用相对路径或者全局环境变量来实现跨系统支持。