2009-06-11 37 views
56

Khi xác định đường dẫn đến thư mục dưới dạng biến hoặc hằng số, nó có kết thúc bằng dấu gạch chéo không? Quy ước là gì?Biến kết thúc đường dẫn thư mục có dấu gạch chéo không?

pwd trong unix hiển thị thư mục hiện tại của bạn mà không có dấu gạch chéo, trong khi tab hoàn thành cd /var/www/apps/ bao gồm dấu gạch chéo, khiến tôi không chắc chắn.

Trả lời

14

Tôi không bao gồm dấu gạch chéo sau khi tôi ví dụ xác định thư mục để lưu trữ tệp. Đó là bởi vì tôi sẽ sử dụng nó như

$store_file = "$store_path/$file_id"; 

Tôi sẽ luôn thêm dấu gạch chéo trước khi sử dụng biến được cho là giữ đường dẫn thư mục. Tôi nghĩ tốt hơn nên luôn thêm một người để tự hỏi liệu dấu gạch chéo có được bao gồm hay không.

+19

Không có dấu gạch chéo có nghĩa là không rõ ràng nếu đường dẫn trong $ store_path là tệp hoặc thư mục. "/ tmp/store_data" là một tệp hoặc một thư mục? – Darwin

+2

Khi sử dụng chức năng [realpath()] (http://php.net/manual/en/function.realpath.php) của PHP, nó sẽ không in dấu gạch chéo. Hệ thống và công cụ của bạn có thể quyết định quy ước của bạn. – jmbertucci

+6

Có nhiều dấu gạch chéo ở bất kỳ đâu thường sẽ được hiểu là dấu gạch chéo đơn. Vì vậy, bạn thậm chí có thể có một cái gì đó như ''///' + $ root + '//' + $ file + '/'' và nó sẽ không quan trọng. Mặc dù có dấu gạch chéo sau là một cách hay để phân biệt đường dẫn có phải là tệp hoặc thư mục hay không nhưng sẽ tốt hơn để nối vào các đường dẫn như ''/' + $ root' thay vì' $ root + '/' 'như bạn không thể lạc quan rằng đường dẫn được nối thêm có dấu gạch chéo, nhưng bạn có thể tương đối yên tâm rằng nhiều dấu gạch chéo sẽ được hiểu là một dấu gạch chéo đơn trong hầu hết các môi trường. – Xtrinity

3

Bất cứ khi nào tôi lưu trữ đường dẫn thư mục hoặc trả lại chúng từ API, tôi cố gắng và tuân thủ quy ước giữ dấu gạch chéo. Điều này tránh toàn bộ 'nó là một tập tin hay một thư mục' mơ hồ.

Phụ Lục:
này không có ý định trở thành một sự thay thế cho việc sử dụng phương pháp có thể chịu đựng hoặc là một dấu gạch chéo hoặc vắng mặt của nó. Ngay cả khi sử dụng quy ước này tôi vẫn luôn sử dụng Path.Combine(...) và các phương pháp tương tự.

+0

python: 'os.path.join (dir, subdir_or_file)' – IceArdor

3

Tôi có xu hướng chỉ cần thêm dấu gạch chéo như tôi nhiều hơn khả năng sẽ sử dụng thư mục đó để thêm/lấy các tập tin ...

Xét về web tham khảo nó thực sự có thể tăng hiệu suất bỏ dấu gạch chéo trong

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

0

tôi chưa từng thấy một quy ước công ty một trong hai cách.

Mặc dù vậy, chắc chắn rằng bất cứ điều gì bạn giải quyết, người khác sẽ chắc chắn 100% nó phải là cách khác. Vì vậy, ý tưởng tốt nhất là để tha thứ cho những thứ đang được thiết lập theo cách nào đó.

Trong thế giới .NET, Path.Combine() cung cấp cho bạn một cách để xử lý việc này - có tương đương trong các môi trường khác, từ các tệp cmd lên.

8

Có, cần:

Tên đường dẫn + tên tệp = vị trí tệp đủ điều kiện.

Do dấu gạch chéo giữa thư mục cuối cùng và tên tệp cần phải ở cuối tên đường dẫn hoặc phần đầu của tên tệp. Tên tệp tiền tố có/có nghĩa là bạn cần tính đến điều này nếu bạn chỉ muốn mở tệp (nghĩa là nếu bạn cho rằng tên tệp không đủ tiêu chuẩn nằm trong thư mục làm việc hiện tại).

+4

.. và không đưa nó vào tài khoản có nghĩa là bạn có thể vô tình rối tung với /, và cách điên rồ đó là – JustJeff

2

Có, có rất nhiều hệ thống tệp hỗ trợ tệp mà không có bất kỳ tiện ích mở rộng nào, do đó, luôn thêm dấu gạch chéo theo sau để tránh bất kỳ sự cố nào.

71

Tôi đi với dấu gạch chéo bởi vì: "Nếu nó kết thúc bằng một dấu gạch chéo, đó là một thư mục Nếu không, đó là một tập tin."

  1. là một quy ước dễ nhớ.

  2. Ít nhất trên các hệ điều hành tôi thường sử dụng, tăng gấp đôi dấu gạch chéo không gây ra sự cố nào, trong khi bỏ qua dấu gạch chéo là nguyên nhân lớn. Do đó, an toàn nhất là đặt cả dấu gạch chéo vào biến và sử dụng "$ path/$ file" khi sử dụng nó.

+6

Đường dẫn thư mục chỉ có thể phân biệt với đường dẫn tệp nếu đường dẫn thư mục có dấu gạch chéo. – Darwin

+3

Nhiều dấu gạch chéo tương đương với một dấu gạch chéo, trừ khi đường dẫn bắt đầu bằng dấu gạch chéo kép. Xem http://unix.stackexchange.com/questions/1910/how-linux-handles-multiple-path-separators-home-username-file – jdh8

+3

Ngoài ra, thêm dấu gạch chéo vào cuối của biến thể cho phép "$ path $ file" thay thế của "$ path/$ file", cho phép trống đường dẫn $ - nghĩa là thư mục làm việc hiện tại. Nhưng không bao giờ sử dụng dấu gạch chéo ngược thay vì gạch chéo. – fantastory

4

Có thể bạn nên suy nghĩ về ý nghĩa của quyết định đối với tệp. Nếu bạn không bao gồm dấu gạch chéo ở cuối thư mục , bạn sẽ phải thêm nó vào đầu tên tên.

Bây giờ, nếu vì lý do nào đó, đường dẫn đến tệp bị thiếu khi bạn nối chuỗi, bạn kết thúc bằng một số thứ như /filename không chỉ là tệp mà còn là đường dẫn tuyệt đối từ thư mục gốc (bất cứ nơi nào có thể trong bối cảnh đó).

Đó là lý do tại sao tôi kết thúc đường dẫn của mình bằng dấu gạch chéo và giữ tệp dưới dạng tệp.

2

Tôi biết đây là một chủ đề cũ nhưng tôi nghĩ rằng tôi muốn chia sẻ những gì tôi làm. Nếu có thể, tôi thường muốn cho phép cả hai và làm một cái gì đó như thế này (nếu nó là PHP):

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

Bằng cách đó, nếu thư mục được định nghĩa trong một tập tin cấu hình, nó không quan trọng cho dù tiếp theo người thay đổi nó bao gồm dấu gạch chéo hoặc không.

2

Trong php, vì hàm dirname (__ FILE __) trả về tên thư mục mà không có dấu gạch chéo ở cuối. Tôi có xu hướng dính vào quy ước đó.

Nếu không, sử dụng dấu gạch chéo ở cuối tên thư mục sẽ xung đột với cách dirname (..) hoạt động và sau đó bạn gặp khó khăn trong việc xử lý hai trường hợp vì bạn không biết tên thư mục đến từ Hàm dirname (..) hoặc một contant được định nghĩa với dấu gạch chéo.

Dòng dưới cùng: Không sử dụng dấu gạch chéo theo sau vì tên dirname (..) thì không.

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

Đối với các ngôn ngữ khác, hãy kiểm tra xem nó có sử dụng dấu gạch chéo hay không, sau đó dán vào quy ước của ngôn ngữ.

+1

Một ngoại lệ: dirname ('/ test') = '/' - thay vì trả về một chuỗi rỗng, dirname trả về một dấu gạch chéo trong trường hợp này! Xem ghi chú [ở đây] (http://php.net/manual/en/function.dirname.php). –

Các vấn đề liên quan