文档名称?路径名?基本名称?路径片段的命名标准


228

当我处理路径和文件名时,我总是陷入困境,因为我没有通用的命名系统。

我需要提出一个命名标准并坚持下去,并且我想与他人保持清楚和一致,因此我愿意学习规范的答案。

考虑这个玩具问题:(以Windows为例,但希望答案应该与平台无关)

您将获得一个文件夹的全名:C:\ users \ OddThinking \ Documents \ My Source。您想将文件夹移到下面,然后将所有.src编译为.obj。

在某些时候,您正在查看以下字符串。

C:\users\OddThinking\Documents\My Source\Widget\foo.src

那么,您将使用哪些标识符名称作为零件?

A) foo
B) foo.src
C) src
D) .src
E) C:\users\OddThinking\Documents\My Source\ - i.e. the top of the tree.
F) Widget\foo.src - i.e. the path from the top of the tree to the leaf.
G) Widget - i.e. one node of the tree.
H) C:\users\OddThinking\Documents\My Source\Widget\ - i.e. the name of the folder
I) C:\users\OddThinking\Documents\My Source\Widget\foo.src

让我给出一些答案,以帮助您入门。

A)基本名称?

B)文件名?还是文件名?选择标识符名称时,区别很重要,在此我永远不会保持一致。

C)扩展

D)扩展。等等,这就是我所说的C。是否应该避免存储点,而是在需要时才放入?如果特定文件上没有点怎么办?

H)路径名?还是等等,这只是道路吗?

I)文件名。等等,这就是我所说的C. Path。等等,这就是我所说的H。也许H应该是文件夹名称。但是,“文件夹”不是Windows专用术语吗?


Microsoft的技术编辑Mike Pope在他的博客上指出,尽管Microsoft样式指南始终坚持两个词:文件名,文件夹名,卷名,但Apple样式指南有时将它们结合在一起:文件名,路径名,卷名。
奇怪的想

A)绝对不应称为basename,因为basename已在许多地方用于表示路径中的最后一项(对于文件,这将是没有dirpath的文件名)。有些地方将文件名不带扩展名stem
Wisbucky

此外,对于具有多个句点的文件(例如foo.src.txt),是否存在标识(和命名)扩展名的标准方法?
user117529 '18

Answers:


178

我认为您对“标准”命名约定的搜索将徒劳。这是我基于现有知名程序的建议:

A)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src

Vim称它为文件根(:help filename-modifiers)

B)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

文件名或基本名

C)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo。src (不带点)

文件/名称扩展名

D)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (带点)

还有文件扩展名。只需存储没有点的文件,如果文件上没有点,则文件没有扩展名

E)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

树的顶部
没有约定,git将其称为基本目录

F)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

从树顶到叶
相对路径的路径

G)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

树的一个节点
没有约定,也许是一个简单的目录

H)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

目录名称

我)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

完整/绝对路径


8
它变得不合时宜了,但是要小心地将扩展名与点分开存储。您需要处理文件名“ foo”,“ foo”。和“ foo.txt”(甚至是“ foo.txt.bak”。)
奇怪的

1
大家好,很好的例子。如果将答案放在问题旁边,而不是使用强制向上滚动的引用,则更容易阅读。我顺便进行了修改以改进它。Grettings
维克多

3
维克多(Victor),由于您的编辑被拒绝了(wtf伙计们,这是一个非常不错的改进!)我自己做了:-)
blinry

1
对于1.(仅文件名不带扩展名),File Title由于缺乏明确的约定或至少没有全球共识,我决定选择很久以前。
polyvertex 2015年


36

首先是好问题,我的+1。当我不得不在Utility类中创建大量函数时,这件事困扰了我。GetFileName?或GetFullName?GetApplicationPath是指完整路径还是目录名?等等。我来自.NET背景,所以我想我可以为@blinry出色的答案添加更多内容。

简介:(斜体字是我不会用作程序员的内容)

  1. Path:路径指定文件系统中的唯一位置(除非其相对路径)。路径名使用较少,但我会坚持使用路径-它几乎解释了它的含义。路径可以指向文件或文件夹,甚至不指向任何位置(C:\)。路径可以是:

    1. 相对路径My Source\Widget\是相对路径还是Widget\foo.src。自我解释。
    2. 绝对路径完整路径:是指向目标的完全限定路径。我倾向于更频繁地使用后者。C:\users\OddThinking\Documents\My Source\Widget\foo.src因此是完整的路径。最后看一下我所说的指向文件并以目录结尾的完整路径。

    wiki页面和.NET命名为路径是一致的。

  2. 根路径根目录:前者是.NET约定,而后者在UNIX圈子中更为常见。尽管我都喜欢,但我倾向于更多地使用前者。在Windows中,与UNIX不同,它具有许多不同的根路径,每个分区都有一个。Unix系统有一个根目录,该目录包含其他目录和文件的信息。例如。C:\是根路径。

  3. 文件夹文件夹名称WidgetOddThinking以您的情况为准。这可能是仅Windows的约定(实际上这是我自己的奇怪想法:)),但是我强烈反对blinry回答“ Directory”。尽管对于普通用户而言,目录的含义文件夹的含义相同(如子文件夹,子目录),但我认为从技术角度来看,“目录”应该听起来像是目标的合格地址,而不是目标本身。下面更多。

    1. 子文件夹:关于users OddThinkingDocuments是子文件夹。
    2. 子目录:对于users OddThinking\OddThinking\Documents\并且OddThinking\Documents\My Source\Widget\是子目录。但是我们不需要经常去打扰,对吗?
    3. 子文件夹:关于users OddThinking子文件夹(以及子文件夹)
    4. 父文件夹:为OddThinking users其父文件夹(只需提及不同的术语,没什么大不了的)。
  4. 目录目录名称:前者通常在现实生活中使用,后者在代码中。这是指直到目标的父文件夹的全限定路径(或简称为全路径)。在您的情况下,(是的,目录绝对不能指向文件)。我在代码中使用目录名称,因为目录是.NET中的类,而目录名称是库本身称为的名称。它与UNIX系统中使用的目录名完全一致。C:\users\OddThinking\Documents\My Source\Widget

  5. 文件名基名:与扩展沿文件的名称。您的情况:foo.src。我要说的是,出于非技术用途,我更喜欢文件名(这对最终用户意味着什么),但是出于技术目的,我会严格使用basename。MS经常使用文件名,但是令我惊讶的是,它们不仅在文档中,甚至在库中都不一致。文件名可能表示文件的基本名或完整路径。因此,我赞成使用基名,这就是我在代码中所称的名称。Wiki上的该页面也说文件名可能表示完整路径或基本名称。出乎意料的是,即使在.NET中,我也可以找到用法基本名称来表示文件的根名称。

  6. 扩展文件扩展名文件扩展名:我喜欢最后一个。所有人都指同一件事,但又是什么辩论呢!维基说是src那时的话,我记得读过许多语言解释为.src。注意点。所以我的观点再次是,对于临时使用而言,它无关紧要,但是作为程序员,我始终将扩展视为.src

    好的,我可能已经尝试获取一些标准用法,但这是我遵循的两个约定。这是关于完整路径。

    1. 我通常将指向文件的完整路径称为文件路径。对我来说,文件路径是明确的,它告诉我它是什么。虽然使用文件名可以找到它作为文件名,但是在我的代码中我将其称为文件名。它也与“ 目录名 ” 一致。从技术角度来看,名称是指完全合格的名称!令人沮丧的是,.NET使用术语“文件名”(因此在这里有我的情况),有时甚至使用文件路径。

    2. 我将完整路径称为以目录结尾的目录。实际上,可以将任何不指向文件的地址称为目录。所以C:\users\OddThinking\Documents\My Source\是一个目录,C:\users\OddThinking\是一个目录,甚至OddThinking\Documents\My Source\(更好地称之为子目录,甚至更好的相对路径-一切取决于你处理它的上下文中)。在上面,我提到了与目录不同的东西,即目录名。这是我的看法:我将找到一条避免混乱的新道路。这是D:\Fruit\Apple\Pip\什么 目录。但是,如果问题是目录的名称,或者甚至是更好的目录名称D:\Fruit\Apple\Pip\,答案是D:\Fruit\Apple\。希望它清除。

    我想说最好不要担心最后两个词,因为这会造成最大的混乱(对我个人而言)。只需使用完整路径一词即可!

要回答你:

  1. 关于你给的道路

    A)不知道。无论如何,我从来不需要一个人待着。

    B)基名

    C)我暂时只称它为文件扩展名,我最不用担心,因为我不需要在代码中单独命名它。

    D)文件扩展名一定。

    E)我认为这不是通用要求。不知道。在.NET中,基本目录与目录名相同。

    F)相对路径

    G)文件夹(父文件夹为基名foo.src

    H)目录名

    I)完整路径(甚至文件名)

  2. 总的来说(抱歉,有点冗长,只是为了指出要点),但假设foo.src确实是一个文件

    A)不适用

    B)基名

    C)不适用

    D)扩展

    E)目录或简单路径

    F)相对路径

    G)不适用

    H)目录或简单路径

    I)完整路径(甚至文件名)

我身边的一个例子进一步说明了这一点:

  1. 考虑路径C:\Documents and Settings\All Users\Application Data\s.sql

    1. C:\Documents and Settings\All Users\Application Data\s.sql 是完整路径(这是文件名)
    2. C:\Documents and Settings\All Users\Application Data\ 是目录名称。
  2. 现在考虑路径 C:\Documents and Settings\All Users\Application Data

    1. C:\Documents and Settings\All Users\Application Data 是完整路径(恰好是目录)
    2. C:\Documents and Settings\All Users 是目录名称。

我的两个提示:

  1. 我遵循这样的经验法则:在寻址全地址时,无论其类型如何,我几乎总是称其为“全路径”。这不仅消除了对文件路径和文件夹路径使用的两种术语,而且还避免了将文件命名为文件名时可能造成的混淆(对于大多数用户而言,这立即转换为基名)。但是,是的,如果您必须具体说明路径的类型,最好先命名为文件名或目录,而不是更通用的“路径”。

  2. 无论是什么,您都将牢记自己的想法,并始终与之保持一致。团队成员之间达成共识,这意味着这个,而不是那个。

现在,从圈子开始,我有一些练习。OS X和android计算机上将使用新的术语品牌。所有这些都与文件系统中的物理路径有关。在使用网址的情况下,将出现一组全新的术语。我希望有人能填补这个空白:)我很高兴听到您遵循的惯例。


很长时间以来,我一直在使用“路径名”一词来表示包括完整文件名在内的整个绝对路径。您的回答,此处的其他消息以及其他地方的资源已经改变了我的想法,现在,我将使用单词“ fullpath”来表示,使用“ path”来表示不带文件名的位置,并使用“ filename”或“ name”来表示文件名本身。
Nate

24

在C ++中,Boost.Filesystem为路径的各个部分设计了一个命名法。有关详细信息,请参见路径分解参考文档以及本教程

这是基于教程的摘要。对于:

  • Windows路径: c:\foo\bar\baa.txt
  • Unix路径: /foo/bar/baa.txt

你得到:

Part            Windows          Posix
--------------  ---------------  ---------------
Root name       c:               <empty>
Root directory  \                /
Root path       c:\              /
Relative path   foo\bar\baa.txt  foo/bar/baa.txt
Parent path     c:\foo\bar       /foo/bar
Filename        baa.txt          baa.txt
Stem            baa              baa
Extension       .txt             .txt

C ++标准ISO / IEC 14882:2017

此外,Boost.Filesystem术语已被C ++ 17采用 =>参见std::filesystem

Function name     Meaning
----------------  -------------------------------
root_name()       Root-name of the path
root_directory()  Root directory of the path
root_path()       Root path of the path
relative_path()   Path relative to the root path
parent_path()     Path of the parent path
filename()        Path without base directory (basename)
stem()            Filename without extension
extension()       Component after last dot

6
他们怎么称呼整个事情呢?pathfullpath
Wisbucky

@wisbucky整个术语在其术语中称为“路径”。
Emile Cormier

1
@wisbucky修复了​​链接。谢谢。
Emile Cormier

@olibre:感谢C ++ 17更新。但是stem()文件名的一部分,而不是路径的一部分
Emile Cormier

1
@ johnc.j。太可惜了Boost.Filesystem在第一次问这个问题时并不为人所知。我宁愿采用同行评审库的命名法,也不愿自己动手做一些事情。
Emile Cormier

9

Python的pathlib标准库对路径组件有很好的命名约定:https : //docs.python.org/3/library/pathlib.html

a)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src

b)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

名称

c)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo。src (不带点)

[没有]

d)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (带点)

后缀

e)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

大父母之路

f)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

父代路径的相对路径

g)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

父母名字

h)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

父路径

i)C:\ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src

路径


8

不,你并不疯。

在Windows系统中,有时包含文件的目录路径称为path,从一开始就是这样。因此,例如

    x:\dir1\dir2\myfile.txt

    Windows:
    --------
        PATH:  x:\dir1\dir2
        FILE:  myfile.txt

    Unix/Linux:
    -----------
        PATH:  /dir1/dir2/myfile.txt
        FILE:  myfile.txt

Unix / Linux方法更加合乎逻辑,这就是上面每个人都提到的:包含文件名本身的路径。但是,如果您键入“ call /?” 在Windows命令行中,您将获得以下信息:

    %~1         - expands %1 removing any surrounding quotes (")
    %~f1        - expands %1 to a fully qualified path name
    %~d1        - expands %1 to a drive letter only
    %~p1        - expands %1 to a path only
    %~n1        - expands %1 to a file name only
    %~x1        - expands %1 to a file extension only

就是这样,“仅路径”和“仅文件名”。同时,它们将整个字符串称为“完全限定的路径名​​”,即驱动器号加路径加文件名。因此,没有真正的真理。没用 你被出卖了。

无论如何,

回答你的问题

这就是我为您的示例命名的方式:

A: -
B: basename
C: extension
D: -
E: -
F: -
G: -
H: pathname (or dirname or containing path)
I: full name

ADEF没有简单的昵称。而且由于php可能是最广为人知的跨平台语言,因此每个人都可以理解“ basename”和“ dirname”,因此我坚持使用这种命名方式。全名也很明显;完整的路径会有点模棱两可,但是在大多数情况下,它意味着完全相同的事情。


1
很长时间以来,我一直在使用“路径名”一词来表示包括完整文件名在内的整个绝对路径。这里的其他答案以及其他地方的资源已经改变了我的想法,现在我将使用单词“ fullpath”来表示,“ path”表示不带文件名的位置,“ filename”或“ name”来表示文件名本身。
Nate
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.