2009-06-11 124 views

回答

14

当我例如定义一个用于存储文件的目录时,我不包括尾部斜线。这是因为我会使用它像

$store_file = "$store_path/$file_id"; 

我会在使用应该保存目录路径的变量之前添加一个尾部斜杠。我认为最好总是添加一个,而不是想知道是否包含尾部斜线。

+19

没有尾部斜线表示它不清楚$ store_path中的路径是文件还是目录。 “/ tmp/store_data”是文件还是目录? – Darwin 2012-04-27 08:54:45

+2

当使用类似PHP的[realpath()](http://php.net/manual/en/function.realpath.php)函数时,它不会打印结尾的斜杠。你的系统和工具可能决定你的约定。 – jmbertucci 2012-12-27 17:53:00

+6

在任何地方都有多个斜杠通常会被解释为单斜杠。所以你甚至可以拥有像''///'+ $ root +'//'+ $ file +'/'`这样的东西并不重要。尽管使用尾部斜线是辨别路径是否是文件或目录的好方法,但最好将它追加到诸如“/'+ $ root”而不是`$ root +'/'之类的路径上你不能肯定被追加的路径有一个斜线,但你可以确信在大多数环境中多个斜线会被解释为单斜线。 – Xtrinity 2016-01-11 02:52:46

3

每当我存储目录路径,或从API返回它们时,我会尽量遵守保留斜线的惯例。这避免了整个'它是一个文件或目录'含糊不清。

附录
这并不意图是用于使用能耐受任一尾随斜线或它的不存在的方法的替代物。即使使用这个惯例,我仍然总是使用Path.Combine(...)和类似的方法。

+0

python:`os.path.join(dir,subdir_or_file)` – IceArdor 2017-01-05 03:23:11

0

我从来没有见过一个公司约定无论哪种方式。但是,很确定,无论你如何解决,其他人都会100%确定它应该是另一种方式。所以,最好的想法是容忍任何方式设定的事情。

在.NET世界中,Path.Combine()为您提供了一种方法来处理这个问题 - 其他环境中存在等价物,从cmd文件开始。

8

是的,它应该如下:

路径名+文件名=完全限定的文件位置。

因此,最后一个目录和文件名之间的斜杠需要位于路径名的末尾或文件名的起始位置。用/表示文件名前面加上/表示如果您只想打开一个文件(即,如果您认为文件名不在当前工作目录中),则需要考虑这一点。

2

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

71

我去与结尾的斜线,因为:“如果它以斜线结束,这是一个目录如果不是,它是一个文件。”

  1. 是一个容易记住的习俗。

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

4

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

现在,如果由于某些原因导致该文件的路径在连接字符串时缺失,则最终得到类似于/filename的文件,该文件不仅仅是文件,而是根目录的绝对路径(可能是在这方面)。

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

2

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

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

这样,如果该目录是在配置文件中定义,也无所谓是否下一个改变它的人包括或不是。

2

在php中,由于dirname(__ FILE __)函数在末尾不带斜杠返回目录名称。我倾向于遵守那个惯例。

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

底线:由于dirname(..)没有使用尾部斜杠。

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

对于其他语言,检查提取路径名称的功能,看看它是使用尾随斜线与否,然后坚持到语言的约定。