【问题标题】:Fully qualified path Vs. Canonical Path完全合格的路径 Vs。规范路径
【发布时间】:2011-04-05 15:11:24
【问题描述】:

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

我很清楚规范路径是什么,但我不明白fully-qualified path's concepts

对于文件或目录,完全限定的路径是否只存在一件事? - 类似规范路径。

两者是完全一样的概念吗?

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

编辑
我请维护Naming Files, Paths, and Namespaces 页面的人告诉我这一点。
他回复了我。

这也是标准路径吗?
C:\directory\..\directory\file.txt

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

他的意思是,在我的猜测中,如果我们将“C:\directory\..\directory\file.txt”这样的参数添加到函数所需的完全限定路径中,该函数永远不会重新解释路径并且然后失败。

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

【问题讨论】:

  • 这太奇怪了。我认为在 Unix 上 .. 节点实际上存在。因此,“stuff/../otherstuff”是完全合格的,并且一个软件处理它,将完美地工作,因为 .. 只是另一个目录。如果在 windowsland 上不是这样,那么它只是另一个奇怪的东西,可以完美地创建更多的角箱以手动处理。 (典型的 MS 方式)

标签: java windows winapi path


【解决方案1】:

没有。恕我直言,完全限定路径只能让您以明确的方式找到资源(独立于当前工作目录、PATH 环境等),但两个不同的路径可能会标识相同的资源。

我不知道知道两条路径是否指向同一个文件的 Windows 方式。

【讨论】:

  • 它没有。利用这是将同一个 dll 多次映射到内存中的一种方法。
【解决方案2】:

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

  • “完全限定”“绝对路径” 表示相同的意思 - 与隐含或指定上下文无关的路径。
  • 每条路径要么是完全限定路径,要么是相对路径
  • 文件系统上的每个位置都有许多可以用来引用它的路径,包括许多完全限定的路径

    • C:\temp.txt
    • C:\Program Files\..\temp.txt
    • C:\Program Files\Microsoft\..\..\temp.txt
  • 从概念上讲,其中一种完全限定的路径是指定该资源的最简单、最直接的方法 - 这就是您的规范路径

对于文件或目录,完全限定的路径是否只存在一件事? - 类似规范路径。

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

What's the difference between getPath(), getAbsolutePath(), and getCanonicalPath() in Java?

但是在它说“绝对”的任何地方都替换为“完全合格”。

为了清楚起见,有些人还会使用术语“相对路径”来指代其中包含“相对引用”(双点 ..)的路径。例如,有些人可能会因为双点而将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:\目录..\目录\文件.txt

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

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

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

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

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

所以

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

section of the MSDN pageC:\directory\..\directory\file.txt 上并不清楚:如果C:\directory\..\directory\file.txt 被认为是相对的,并且不能与说他们需要完全合格(但不一定是规范?)路径的 Windows API 一起工作,我' d 建议该页面需要使其更清晰。

完全合格与相对

文件名相对于当前目录如果它不以下列之一开头

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

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

如果路径包含“双点”,则也称路径是相对的;也就是说,路径的一个组成部分中有两个周期。此特殊说明符用于表示当前目录之上的目录,也称为“父目录”。这种格式的例子如下:

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

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

无论如何,每个人的成长都不一样,语境为王,所以我想每个人在阅读文档或与不同背景的工程师讨论“完全-合格的”与“相对的”

【讨论】:

  • 你开车穿过街道中间的一个入口,最终到达符号链接的目的地;)
  • 我建议该页面需要更清晰。是的,我也是!
  • 我不同意您关于“完全合格”和“绝对路径”的意思相同的说法。至少,不是在 Windows 上。根据这个参考(docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats),C:\Documents\Newsletters\Summer2018.pdf 是绝对路径和完全限定路径。路径\Program Files\Custom Utilities\StringFinder.exe 是绝对路径,但不是完全限定的。如果当前目录是D:,则执行该路径将导致执行D:\Program Files\Custom Utilities\StringFinder.exe,而不是C: 驱动器上的那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多