一个目录pathvariables应该以尾部的斜线结尾吗?
当定义一个目录的path作为一个variables或常量时,它是否应以尾部的斜线结尾? 什么是约定?
unix中的pwd
显示了当前目录,没有结尾的斜杠,而cd /var/www/apps/
的tab完整包含了尾部的斜线,这让我不确定。
当我例如定义一个用于存储文件的目录时,我不包括结尾的斜杠。 那是因为我会用它
$store_file = "$store_path/$file_id";
在使用应该保存目录path的variables之前,我总是会添加一个斜线。 我认为最好总是添加一个,而不是怀疑是否包含尾部的斜线。
我跟着斜线去,因为:
-
“如果以斜杠结尾,就是一个目录,如果没有,就是一个文件。” 是一个容易记住的习俗。
-
至less在我通常使用的操作系统上,加倍斜杠不会导致问题,而省略斜杠会导致大的问题。 因此,将斜线放入variables并在使用时使用“$ path / $ file”是最安全的。
是的,它应该如下所示:
path名+文件名=完全合格的文件位置。
所以最后一个目录和文件名之间的斜线需要在path名的末尾或文件名的开头。 用/前缀文件名,意味着如果你只是想打开一个文件(例如,如果你认为一个不合格的文件名在当前工作目录下),你就需要考虑这个。
也许你应该考虑你的决定对文件的意义。 如果不在目录名称末尾包含尾部斜线,则必须将其添加到文件名的起始位置。
现在,如果由于某种原因导致文件的path在连接string时丢失了,那么最终会得到类似于/filename
,这不仅仅是一个文件,而是一个来自根目录的绝对path(无论这个文件在哪里)。
这就是为什么我用斜线结束我的path,并将文件保存为文件。
我往往只是添加尾随斜杠,因为我很可能要使用该目录来添加/检索文件…
在网页引用方面,它实际上可以提高性能,留下最后的斜线
无论何时我存储目录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文件开始。