完全限定路径与规范路径

2022-09-02 09:02:21

Java中有一个规范路径概念。
WinApi 中有一个完全限定的路径。

我很清楚什么是规范路径,但我不理解完全限定路径的概念

对于文件或目录,完全qulized路径是否只存在一件事?-像规范路径。

它们都是完全相同的概念吗?

编辑
还有一件事,symbloc链接还是硬链接属于完全限定路径?

编辑
我要求维护命名文件,路径和命名空间页面的人让我知道这一点。
他回答我。

这是否也是完全限定路径?
C:\directory\..\目录\文件.txt

从技术上讲,这是一个相对路径,因为它包含双点(..),并且某些API无法正确处理这些路径(文档将明确指出它需要完全限定的路径)。
这两者是相互排斥的。

他的意思是,在我的猜测中,如果我们放一个像这样的参数“C:\directory\.。\directory\file.txt“到函数所需的完全限定路径,该函数从不重新解释该路径,然后失败。

如果是这样,则完全限定路径与规范路径完全相同。不是吗。


答案 1

“完全限定路径”“绝对路径”的同义词

  • “完全限定”“绝对路径”的含义相同 - 不相对于隐含或指定上下文的路径。
  • 每个路径要么是完全限定的路径,要么是相对路径
  • 文件系统上的每个位置都有许多路径可用于引用它,包括许多完全限定的路径

    • C:\温度.txt
    • C:\程序文件\..\temp.txt
    • C:\Program Files\Microsoft\..\..\temp.txt
    • 等。
  • 从概念上讲,这些完全限定路径之一是指定该资源的最简单,最直接的方法 - 这是您的规范路径

对于文件或目录,完全qulized路径是否只存在一件事?-像规范路径。

否,完全限定路径是任何不是相对路径的路径(不相对于隐含或指定上下文的当前目录)。多个但不同的完全限定路径可以引用文件系统上的同一位置。重读:

Java 中的 getPath()、getAbsolutePath() 和 getCanonicalPath() 有什么区别?

但用“完全合格”代替“绝对”,到处都是“绝对的”。

需要明确的是,有些人还会使用术语“相对路径”来指代其中带有“相对参考”(双点)的路径。例如,由于双点,有些人可能会称之为“相对路径”,但我会将其称为具有相对引用的完全限定路径。希望从对话中可以清楚地看出,当他们说“相对路径”(相对于上下文的路径或其中有相对引用的路径)时,他们的意思是什么。..C:\Program Files\Microsoft\\..\temp.txt

它们都是完全相同的概念吗?

否,如另一个 SO 问题所示,有很多方法可以指定到某个位置的完全限定路径(绝对路径),但只有一个完全限定路径被视为到该位置的规范路径。

还有一件事,UNC 路径是否也属于完全限定路径?

是的,UNC 路径不是相对路径;它们是完全限定的路径。- http://msdn.microsoft.com/en-us/library/aa365247(v=VS.85).aspx#fully_qualified_vs._relative_paths

符号链接或硬链接是否属于完全限定路径?

这是一个独立的概念。路径(无论它是相对路径还是完全限定路径)都指向文件系统中的某个位置。该位置的实体可以是许多内容之一:普通文件,目录,符号链接,硬链接,设备,命名管道等。符号链接或硬链接具有元数据,这些数据指向您在该位置实际查找的数据。

类比时间

你可以从通往某人家的方向的角度来考虑路径和链接:

  • 相对路径是从当前位置开始的方向
  • 完全合格的路径是从市政厅出发的指示,无论您身在何处
    • 在我们这个陌生的小镇Unixville,每个人都同意并隐含地理解“完全合格的方向”总是从市政厅开始,奇怪的是,这是一个每个人都称之为“”的建筑。/
    • 下一个城镇(Windowsville)有多个市政厅(城镇的每个部分一个),称为,,等。C:\D:\E:\
    • 不同的人可能会给你不同的方向(路径)到达同一所房子,即使他们都从同一个起点(市政厅)开始 - 有些方向会比其他方向更直接。
  • 规范路径是完全合格的方向,是从市政厅到所需房屋的最简单,最直接的方法
  • 符号链接就像一个空地,带有一个注释,为转发地址提供方向
    • 将您带到这里的方向类型(无论是相对方向,完全合格的方向,甚至是规范的完全限定的方向)与它是否通向房屋或任何带有转发方向的空地块无关
    • 有一个奇怪的情况,你方向上的一条街道实际上是一个象征性的链接(绕道?门户?) - 如果我们仔细观察它,这个类比就会在这里分崩离析,所以让我们忽略它:-)
  • 硬链接是从两个或多个不同地址访问的房屋。
    • 想想榆树街和主街拐角处的一所房子。邮局错误地给了它两个地址:和。无论你去哪个地址,你最终都会在同一所房子里。10 Elm Str20 Main Str
    • 在我们这个陌生的小镇上,这些硬链接的房子可以有多个地址,这些地址不必彼此靠近。
    • 无论你去哪个地址,它都是同一所房子。它不是副本,也不是转发地址。神奇的是,一旦你进去,你最终会在同一所房子里,不管你以前用哪个地址到达那里。
    • 将您引导到房屋的方向(无论使用哪个地址,或者这些方向是否是相对方向,完全限定的方向,甚至是规范的完全限定方向)与该地址的房屋是否是硬链接房屋无关

补遗

编辑

我要求维护命名文件,路径和命名空间页面的人让我知道这一点。他回答我。

这是否也是完全限定路径?C:\directory..\目录\文件.txt

我想知道该页面的维护者会使用什么术语来区分它们,因为他称它们都是相对路径。我同意双点是一个相对参考,但我不会将整个路径标记为相对路径,因为它中间有双点。在他的术语中,完全限定和规范之间似乎没有区别。(我想,这就是你问题的根源)。..\file.txtC:\directory\..\directory\file.txt

我来自Unix和Java背景,所以也许这有什么不同。据我所知:

  • 相对/部分限定 - 如果没有提供相关信息的关联上下文,例如当前工作目录、当前驱动器、驱动器的当前目录、shell PATH 设置、Java CLASSPATH 设置或引用 URL,就无法确定位置。

  • 绝对/完全限定 - 位置独立于关联的上下文,即无论当前工作目录、当前驱动器、驱动器的当前目录、shell PATH 设置、Java CLASSPATH 设置或引用 URL 如何,位置都是相同的。

  • 规范 - 最简单的完全限定,即没有双点

所以

  • ..\file.txt - 相对
  • C:\directory\..\directory\file.txt - 完全限定
  • C:\directory\file.txt - 完全限定和规范

MSDN页面的那一部分不清楚:如果被认为是相对的,并且不能与Windows API一起使用,这些API说他们需要一个完全限定的(但不一定是规范的?)路径,我建议该页面需要更清晰。C:\directory\..\directory\file.txtC:\directory\..\directory\file.txt

完全限定与相对

如果文件名不以以下之一开头,则该文件名相对于当前目录:

... * 带有反斜杠的磁盘指示符,例如“C:\”或“d:\”。...

由于以带有黑斜杠的磁盘指示符开头,因此此路径是完全限定的,而不是相对的。C:\directory\..\directory\file.txt

如果路径包含“双点”,则也称其为相对路径;也就是说,在路径的一个组件中将两个周期放在一起。此特殊说明符用于表示当前目录上方的目录,也称为“父目录”。此格式的示例如下:

  • "..\tmp.txt“指定一个名为 tmp 的文件.txt该文件位于当前目录的父目录中。
  • “....\tmp.txt”指定的文件位于当前目录上方的两个目录上。
  • "..\tempdir\tmp.txt“指定一个名为 tmp 的文件.txt该文件位于名为 tempdir 的目录中,该目录是当前目录的对等目录。

我将包含双点的短语解释为前导双点。这些示例仅显示前导双点。术语“当前目录”通常表示进程的当前工作目录或驱动器的当前目录,这仅在谈论前导双点时才有意义。但是,我可以看到如何以另一种方式解释该部分。

无论如何,每个人的成长都是不同的,上下文是王道,所以我想每个人在阅读文档或与不同背景的工程师讨论“完全合格”与“相对”的含义时都需要小心细微差别。


答案 2

不。恕我直言,完全限定路径仅允许您以明确的方式(独立于当前工作目录,PATH环境等)查找资源,但两个不同的路径可以标识相同的资源。

我不知道Windows方法可以知道两个路径是否指向同一个文件。


推荐