Dav*_*man 92
我使用尾随斜杠,因为:
"如果它以斜杠结尾,那么它就是一个目录.如果不是,那就是一个文件." 是一个容易记住的常规.
至少在我经常使用的操作系统上,将斜线加倍会导致没有问题,而省略斜线会导致大斜杠.因此,最安全的做法是将斜杠放入变量并在使用它时使用"$ path/$ file".
Joh*_*erg 21
当我例如定义用于存储文件的目录时,我不包括尾部斜杠.那是因为我会喜欢它
$store_file = "$store_path/$file_id";
Run Code Online (Sandbox Code Playgroud)
在使用应该保存目录路径的变量之前,我将始终添加一个尾部斜杠.我认为总是添加一个比想知道是否包含尾部斜杠更好.
是的它应该如下:
路径名+文件名=完全限定文件位置.
因此,最后一个目录和文件名之间的斜杠需要位于路径名的末尾或文件名的开头.使用/前缀文件名意味着如果您只想打开文件(例如,如果您认为不合格的文件名在当前工作目录中),则需要考虑这一点.
我想这是极少数情况下正确的理论和实践答案不同的情况之一。
从理论上讲,@Karl Wilbur的答案似乎肯定是正确的,因为您应该能够区分对目录节点本身的引用和目录内容。
但在实践中,我认为正确的答案是相反的:
最重要的原因是你可以确定该路径/home/FSObjectX/是一个文件夹,但它/home/FSObjectX是不明确的。没有人能分辨这是一个文件还是文件夹。
规格应尽可能准确且明确。
在绝大多数情况下,您将始终引用文件夹的内容,而不是 dir 节点本身。
在您实际执行的罕见情况下,可以通过删除任何可选的尾随目录分隔符在代码中轻松处理它。
使用双目录分隔符不会造成任何损害,尽管缺少一个肯定会造成损害。
从理论上讲,这是一个糟糕的论点,因为您不应该“偶然”编码,但实际上,错误会发生,并且也许使用尾随 dir-sep 可能最终会在最终用户处减少一些运行时错误。
通读这个有趣的线程,我没有发现使用 Trailing dir-sep 的任何缺点,只是它在理论上是错误的。或者我错过了什么?
在 php 中,由于 dirname(__FILE __) 函数返回目录名称,末尾不带斜杠。我倾向于坚持这个惯例。
否则,在目录名末尾使用斜杠将与 dirname(..) 的工作方式发生冲突,然后您将不得不处理这两种情况,因为您不知道目录名是否来自 dirname(.. ) 函数或用尾部斜杠定义的内容。
底线:不要使用尾部斜杠,因为 dirname(..) 不使用尾部斜杠。
// PHP Example
dirname(__FILE__); // returns c:\my\directory without a trailing slash, so stick to it!
Run Code Online (Sandbox Code Playgroud)
对于其他语言,检查提取路径名的函数,看看它是否使用尾部斜杠,然后遵守该语言的约定。
每当我存储目录路径或从API返回它们时,我都会尝试遵循保持尾部斜杠的惯例.这避免了整个'它是文件还是目录'的模糊性.
附录:
这并不是要替代使用能够容忍尾随斜线或缺席的方法.即使使用这种惯例,我仍然总是使用Path.Combine(...)和类似的方法.
也许您应该考虑一下您的决定对文件意味着什么。如果您不在目录名的末尾包含尾部斜杠,则必须将其添加到文件名的开头。
现在,如果由于某种原因,当您连接字符串时缺少通向文件的路径,您最终会得到类似的东西/filename,它不仅是一个文件,而且是来自根目录的绝对路径(无论在该上下文中的任何位置) .
这就是为什么我用斜杠结束我的路径并将文件保留为文件的原因。
小智 5
我知道这是一个旧线程,但我想我会分享我所做的事情。如果可能的话,我通常会同时允许两者并执行类似的操作(如果是 PHP):
$fullPath = rtrim($directory, '/') . '/filename.txt');
Run Code Online (Sandbox Code Playgroud)
这样,如果目录是在配置文件中定义的,那么下一个更改它的人是否包含尾部斜杠并不重要。
我知道这已经有10年的历史了,但我想投入我自己的0.02美元。
不,绝对不
我们正在谈论Unix系统。关于目录本身,它是一个节点,就像其他节点一样。当提到的目录,它不应该曾经有在其名称中的转义斜杠(参考:dirname,pwd,~,echo $HOME,echo $PATH,从输出ls等)。
当引用目录的内容时,则需要一个斜杠。也就是说,ls /home/karl/它比ls /home/karl(FTR,我几乎总是这样做,因为...好吧,懒惰)更合适。
当使用包含目录的变量来创建文件的完整路径时,您总是希望包含斜杠(i。,e:)cp ${HOME}/test ${OTHER_DIR}/。
据预计,一个目录不是在一个斜线结束。对目录以斜杠结尾的任何期望都是错误的。因此,在*_DIR变量值的末尾添加斜杠将破坏预期。
值得指出的是,仅仅因为它是错误的,并不意味着工具/程序包/库就永远不会这样做。在这种情况下,如果不存在斜杠,则会在末尾添加斜杠,这是非常常见的情况。因此,正如Bevan和Paul F都建议的那样,在使用第三方工具时,最好删除目录名称中可能存在的任何斜杠。
Unix索引节点
索引节点(索引节点)是Unix样式的文件系统中的数据结构,用于描述文件系统对象(例如文件或目录)。
- https://en.wikipedia.org/wiki/Inode
文件系统层次结构标准
该对Unix文件系统(文件系统层次标准,AKA FHS)标准清楚地表明,目录不会认为具有尾随斜线,而是目录的内容开始以斜线(唯一的例外是/,因为我们将不参考通过使用一个空字符串来作为文件系统根目录...无论如何,永远不要在那里创建文件。)
- http://www.pathname.com/fhs/pub/fhs-2.3.html
- https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
| 归档时间: |
|
| 查看次数: |
29471 次 |
| 最近记录: |