2009-06-11 121 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! 

對於其他語言,檢查提取路徑名稱的功能,看看它是使用尾隨斜線與否,然後堅持到語言的約定。