什么是“规范路径”?


78

因此,绝对路径是一种到达特定文件或位置的方法,该文件或位置描述了到达该文件或路径的完整路径,完整路径,并且它取决于操作系统(例如Windows和Linux的绝对路径是不同的)。路由到从当前位置描述的文件或位置。(两个点)指示目录树中的上级。几年来我一直很清楚。

搜索时,我什至还看到有规范化的文件!据我所知,规范意味着类似“根据规则”之类的东西。

有人能启发我有关规范事物的理论吗?


5
“ SO”是指“ OS”吗?你是法国人吗?
Kerrek SB 2012年

“Systèmed'exploitation”是的,我知道法语,但是我的意思是OS(我为错,对不起,对不起,呵呵)操作系统...我实际上是墨西哥人xD
Metafaniel 2012年

4
啊,“ Sistema de laOperación,哦!” (顺便说一下,这是“操作系统”。)
Kerrek SB 2012年

4
Emmm ... xD实际上应该是“ Sistema Operativo”,Olé完全是西班牙语(西班牙),是的,我知道它正在运行,我又一次失败了,我分心了哈哈,谢谢=)
Metafaniel 2012年

@Editor,虽然我同意有没有真正的单词“规范化”,这也是错误的认为,开发者不verbinate(“enverb”)的话所有的时间。出于搜索目的,两者都可能会起作用。
戴夫牛顿

Answers:


90

使任何事情“规范”的全部目的是使您可以比较两件事。例如,../../here/bar/x./test/../../bar/x可能都指向相同的位置,但是您不能在两个路径上进行文本比较。但是,如果将它们转换为它们的规范表示,它们都将变为../bar/x,并且我们看到它们实际上是指同一件事。

简而言之,通常情况下,您有多种方式引用一个事物,并且在这种情况下,您可能可以定义一个唯一规范表示,并允许您处理这些事物的集合。

(如果您正在寻找更多示例,则所有数学都充满了针对各种对象的“规范”构造,并且出于相同的目的。也许这篇Wikipedia文章可以提供一些其他指导。)


1
噢,我现在看到了...总之,规范必须是唯一的,因此这是一条完整的路径,没有两个点的相对使用。哦!您的回答很有帮助;)谢谢
Metafaniel 2012年

@Metafaniel:是的,关键是独特性。我想您可以同时拥有规范的相对路径和规范的绝对路径,但这是一个独立的区别。
Kerrek SB 2012年

1
一切都很好,直到那条评论xD我明白了,但是...一条规范的相对路径?据我所知,到目前为止(感谢大家),规范的路径本质上是绝对的。关于规范的相对路径,您能告诉我什么?= S THANKS =)
Metafaniel

1
@Metafaniel:规范的相对路径将相对于给定的固定工作目录。对于给定目录,您可以形成唯一的相对路径。但是您只能比较同一工作目录的目录。相比之下,可以绝对比较规范的绝对路径。
Kerrek SB 2012年

1
如果您授权目录或文件上的硬链接或软链接,则此方法不起作用...在这种情况下,定义规范路径要困难得多(请参阅答案@alfasin)。
Jean-BaptisteYunès16年

27

定义规范路径的一种好方法是:(the shortest absolute path简短,在字符串长度的意义上)。

这是绝对路径和规范路径之间差异的示例:

绝对路径: C:\abc\..\abc\file.txt
规范路径:C:\abc\file.txt


1
根据@KerrekSB,路径必须唯一才能规范,因此在您的示例中我可以看到它:没有其他方式表示C:\ abc \ file.txt感谢示例=)
Metafaniel 2012年

2
@alfasin:Microsoft似乎不同意您的断言,即Windows API函数PathCanonicalize证明“ Windows中没有规范的路径” 。尽管Windows通常不会在路径中强制区分大小写(尽管它取决于卷),但Windows确实会保留路径中每个字符的大小写,即使它允许不区分大小写的访问也是如此。无论如何,我的观点仍然是,最短的绝对路径不一定是规范的。
丹·科恩

2
@DanKorn告诉他们使用规范的定义进行争论。至于您的分歧,您可能是对的,但我仍然没有看到一个很好的反例;)
Nir Alfasi 2015年

2
@alfasin:在我看来,除了字典定义之外,Microsoft还要定义其术语在其自己的操作系统和API中的含义。谁比Windows在规范方面具有更高的权威?为什么“ C:\ PROGRA〜1”不能很好地反驳您的观点,即最短路径在定义上是规范的?
丹·科恩

3
@DanKorn对Microsoft表示了应有的尊重(我尊重他们),他们没有定义规范的含义。规范的意思是“唯一”或“唯一表示”。由于Windows操作系统不区分大小写,因此根据定义,任何路径都不能有唯一的唯一表示形式。它可以是绝对的,但不能规范。如果您认为这种推理不合理,您可以不同意,但是由于此讨论正变得徒劳(我一直在重复并解释我的话),因此请在此处剪裁并同意不同意。
尼尔·阿法西

6

规范路径(或其与绝对路径的区别)取决于系统。
通常,如果(完整)路径包含别名,快捷方式或符号链接,则规范路径会将所有这些解析为它们所引用的实际目录。
示例:如果/bin/a是符号链接,则可以在您请求绝对路径的任何位置找到它,例如从java.io.File#getAbsolutePath获取,而实际文件(即链接的实际目标)即usr/local/bin/a作为规范路径返回,例如来自java.io.File#getCanonicalPath


您的评论对我也很有用!我什至没有想到过符号链接!因此,符号链接绝对不是规范的……非常全面。但是我有一个新的疑问...硬链接呢?他们不够绝对吗?谢谢
Metafaniel

Depends。例如java.io.File#getCanonicalPath不能解析硬链接
Cratylus

1
我还没
有用

回覆。硬链接:不存在解决与规范形式的硬链接的概念。如果两个文件彼此硬链接,则它们都指向磁盘上的相同数据,因此不再有任何规范形式,只有两个完全相同的文件,其数据实际上占据了磁盘上的相同空间。首先将哪个文件链接到磁盘上的数据与规范命名的概念无关。参见stackoverflow.com/questions/185899/…–
康妮·多布斯

2

当您传递目录名而不是文件名时,规范路径的大多数问题都会发生。对于文件,如果我们提供的绝对路径也是规范路径。但是对于dir来说,它意味着省略最后一个“ /”。例如,“ / var / tmp / foo”是规范路径,而“ / var / tmp / foo /”不是。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.