一个目录pathvariables应该以尾部的斜线结尾吗?

当定义一个目录的path作为一个variables或常量时,它是否应以尾部的斜线结尾? 什么是约定?

unix中的pwd显示了当前目录,没有结尾的斜杠,而cd /var/www/apps/的tab完整包含了尾部的斜线,这让我不确定。

当我例如定义一个用于存储文件的目录时,我不包括结尾的斜杠。 那是因为我会用它

 $store_file = "$store_path/$file_id"; 

在使用应该保存目录path的variables之前,我总是会添加一个斜线。 我认为最好总是添加一个,而不是怀疑是否包含尾部的斜线。

我跟着斜线去,因为:

  1. “如果以斜杠结尾,就是一个目录,如果没有,就是一个文件。” 是一个容易记住的习俗。

  2. 至less在我通常使用的操作系统上,加倍斜杠不会导致问题,而省略斜杠会导致大的问题。 因此,将斜线放入variables并在使用时使用“$ path / $ file”是最安全的。

是的,它应该如下所示:

path名+文件名=完全合格的文件位置。

所以最后一个目录和文件名之间的斜线需要在path名的末尾或文件名的开头。 用/前缀文件名,意味着如果你只是想打开一个文件(例如,如果你认为一个不合格的文件名在当前工作目录下),你就需要考虑这个。

也许你应该考虑你的决定对文件的意义。 如果不在目录名称末尾包含尾部斜线,则必须将其添加到文件名的起始位置。

现在,如果由于某种原因导致文件的path在连接string时丢失了,那么最终会得到类似于/filename ,这不仅仅是一个文件,而是一个来自根目录的绝对path(无论这个文件在哪里)。

这就是为什么我用斜线结束我的path,并将文件保存为文件。

我往往只是添加尾随斜杠,因为我很可能要使用该目录来添加/检索文件…

在网页引用方面,它实际上可以提高性能,留下最后的斜线

http://www.netmechanic.com/news/vol4/load_no11.htm

无论何时我存储目录path,或从API返回它们,我都会尝试遵守保留斜线的惯例。 这避免了整个“是文件还是目录”的模糊性。

附录
这并不是为了替代使用可以容忍斜线或缺失斜线的方法。 即使使用这个约定,我仍然总是使用Path.Combine(...)和类似的方法。

是的,有很多文件系统支持没有任何扩展名的文件,所以总是添加斜线以避免任何问题。

我知道这是一个古老的线索,但我想我会分享我的工作。 如果可能的话,我通常会允许这两个,并做这样的事情(如果它是PHP):

 $fullPath = rtrim($directory, '/') . '/filename.txt'); 

这样,如果目录是在一个configuration文件中定义的,那么下一个修改它的人是否包含尾部的斜线并不重要。

在php中,由于dirname(__ FILE __)函数返回的目录名称在最后没有斜杠。 我倾向于遵守这个惯例。

否则,在目录名称末尾使用斜杠将与dirname(..)的工作方式发生冲突,然后由于不知道目录名是否来自dirname(.. )函数或用斜线定义的常量。

底线:因为dirname(..)没有使用尾部斜线。

 // PHP Example dirname(__FILE__); // returns c:\my\directory without a trailing slash, so stick to it! 

对于其他语言,请检查提取path名的函数,并查看是否使用了尾部斜线,然后遵循语言的约定。

我从来没有见过这样的公约。

可以肯定的是,无论你如何解决,别人都会100%确定它应该是另一种方式。 所以,最好的想法是容忍任何方式设置的事情。

在.NET世界中,Path.Combine()为您提供了一种方法来处理这个问题 – 其他环境中也有相同的方法,从cmd文件开始。