文件名?路径名称?基地名称?命名路径的标准

Odd*_*ing 205 language-agnostic filenames cross-platform terminology

当我操作路径和文件名时,我一直处于打结状态,因为我没有使用的通用命名系统.

我需要提出一个命名标准并坚持下去,我希望与其他人保持清晰和一致,所以我开放学习规范的答案.

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

您已获得文件夹的全名:C:\ users\OddThinking\Documents\My Source.您想要遍历下面的文件夹,并将所有.src编译为.obj.

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

C:\users\OddThinking\Documents\My Source\Widget\foo.src
Run Code Online (Sandbox Code Playgroud)

那么,您将使用哪些标识符名称?

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
Run Code Online (Sandbox Code Playgroud)

让我给出一些答案,让你开始吧.

A)基地名称?

B)文件名?还是文件名?选择标识符名称时,差异很重要,我在这里永远不会保持一致.

C)扩展

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

H)路径名称?或等等,这只是路径吗?

I)文件名.等等,这就是我所说的C. Path.等等,这就是我所说的H.也许H应该是文件夹名称.不是"文件夹"是特定于Windows的术语吗?

bli*_*nry 156

我认为你寻找"标准"命名惯例是徒劳的.以下是我的建议,基于现有的知名程序:

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

dir名字

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

完整/绝对路径

  • 这是偏离主题,但要小心扩展存储分离点.您需要处理"foo","foo"的文件名.和"foo.txt"(甚至"foo.txt.bak".) (7认同)
  • Victor,因为你的编辑被拒绝了(wtf家伙,这是一个非常好的改进!)我自己做了:-) (3认同)
  • 大家好,很好的例子。如果您将答案放在问题旁边,而不是使用强制向上滚动的引用,则会更容易阅读。顺便说一下,我进行了编辑以改进它。格雷廷斯 (2认同)

naw*_*fal 34

首先是好问题,我的+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. 文件夹文件夹名称:Widget,OddThinking你的情况等.这可能是Windows唯一的惯例(实际上它是我自己的奇怪想法:)),然而我强烈反对blinry的回答"目录".虽然对于普通的用户目录意味着文件夹(如子文件夹,子目录)相同,但我相信从技术角度来看,"目录"应该听起来像是目标的合格地址而不是目标本身.更多下面.

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

  5. 文件名基名:与扩展沿文件的名称.在你的情况下:foo.src.我会说,对于非技术用途,我更喜欢文件名(这对最终用户来说意味着什么)但是出于技术目的,我会严格坚持使用basename.文件名通常由MS使用,但我很惊讶它们不仅在文档中不一致,甚至在库中也不一致.文件名可能意味着文件的基本名称或完整路径.所以我喜欢basename,这就是我在代码中称之为的内容.wiki上的这个页面也说文件名可能意味着完整路径或基本名称.令人惊讶的是,即使在.NET中,我也可以找到用法basename来表示文件的根名称.

  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)basename

    C)我暂时将其称为文件扩展名,我最不担心,因为我从不需要单独在我的代码中命名.

    D)肯定是文件扩展名.

    E)我不认为这是一般目的要求.不知道.在.NET基本目录中与目录名称相同.

    F)相对路径

    G)文件夹(父文件夹到basename foo.src)

    H)目录名称

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

  2. 总的来说(抱歉有点冗长,只是为了把重点推回家)但假设foo.src确实是一个档案

    A)NA

    B)basename

    C)NA

    D)延期

    E)目录或简单的路径

    F)相对路径

    G)NA

    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. 我遵循这个经验法则,当涉及到解决一个完整的地址而不管它的类型时,我几乎总是把它称为"完整路径".这不仅消除了对文件路径和文件夹路径使用两个术语,而且如果您要将文件名称作为文件名(大多数用户立即转换为basename),也可以避免可能的混淆.但是,如果你必须具体说明路径的类型,那么最好命名文件名或目录,而不是更通用的"路径".

  2. 无论它是什么,你都会有自己的想法,始终与之保持一致.在团队成员之间达成共识,这意味着这个而不是那个.

现在,只是从圈子我有一些练习.一个新的术语品牌将是OS X和Android机器上使用的.所有这些都只是文件系统中的物理路径.在网址的情况下会出现一整套新的术语.我希望有人能够在同一个帖子中填补空白:)我很高兴听到你已经开始的会议.


Emi*_*ier 23

在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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 他们把整个事情称为什么呢?`path`,`fullpath`? (6认同)
  • @wisbucky 整个事情在他们的术语中被称为“路径”。 (2认同)
  • @johnc.j。太糟糕了,当第一次提出这个问题时,Boost.Filesystem 并不为人所知。我宁愿采用同行评审图书馆的命名法,也不愿自己编造一些东西。 (2认同)

Mag*_*ero 15

Python 中的Pathlib 标准库对路径组件有一个简单的命名约定:

A. /x/y/z/ foo.tar .gz > stem.

B. /x/y/z/ foo.tar.gz > name.

C./x/y/z/foo.tar。gz(不包括点)> N/A。

D. /x/y/z/foo.tar .gz(包括点)> suffix.

E. /x/y/ z/foo.tar.gz > grand parent path.

F. /x/y/ z/foo.tar.gz > relative path to grand parent path.

G. /x/y/ z /foo.tar.gz > parent name.

H. /x/y/z/ foo.tar.gz > parent path.

I. /x/y/z/foo.tar.gz > path.


dke*_*ner 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

无论如何,

回答你的问题

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

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

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