Должна ли переменная пути к каталогу заканчиваться косой чертой? - PullRequest
75 голосов
/ 11 июня 2009

При определении пути к каталогу в качестве переменной или константы, он должен заканчиваться косой чертой? Что такое конвенция?

pwd в unix показывает ваш текущий каталог без завершающей косой черты, в то время как вкладка, заполненная cd /var/www/apps/, включает завершающую косую черту, которая оставила меня неуверенным.

Ответы [ 11 ]

85 голосов
/ 11 июня 2009

Я иду с косой чертой, потому что:

  1. "Если это заканчивается косой чертой, это каталог. Если нет, это файл." легко запомнить.

  2. По крайней мере в тех операционных системах, которые я обычно использую, удвоение косой черты не вызывает проблем, в то время как пропуск косой черты вызывает большие. Поэтому безопаснее поместить косую черту в переменную и использовать «$ path / $ file» при ее использовании.

20 голосов
/ 11 июня 2009

Я не включаю косую черту, когда, например, определяю каталог для хранения файлов. Это потому, что я буду использовать его как

$store_file = "$store_path/$file_id";

Я всегда буду добавлять косую черту перед использованием переменной, которая должна содержать путь к каталогу. Я думаю, что лучше всегда добавлять один, чем удивляться, если включен косая черта.

9 голосов
/ 11 июня 2009

Да, так и должно быть:

Путь + имя файла = полное местоположение файла.

ТАК, косая черта между последним каталогом и именем файла должна быть либо в конце пути, либо в начале имени файла. Приставка имени файла к / означает, что вы должны принять это во внимание, если вы просто хотите открыть файл (т.е. если вы предполагаете, что неквалифицированное имя файла находится в текущем рабочем каталоге).

5 голосов
/ 11 июня 2009

Всякий раз, когда я сохраняю пути к каталогам или возвращаю их из API, я стараюсь придерживаться соглашения о сохранении завершающего слеша. Это позволяет избежать двусмысленности, связанной с файлом или каталогом.

Добавление
Это не предназначено для замены методов, которые могут допускать либо косую черту, либо ее отсутствие. Даже используя это соглашение, я все еще всегда использую Path.Combine(...) и подобные методы.

4 голосов
/ 22 февраля 2016

В php, поскольку функция dirname (__ FILE __) возвращает имя каталога без косой черты в конце. Я склонен придерживаться этого соглашения.

В противном случае использование косой черты в конце имени каталога будет конфликтовать с тем, как работает dirname (..), а затем вы застреваете с обработкой двух случаев, так как не знаете, произошло ли имя каталога от dirname (..) функция или константа, определенная косой чертой.

Итог: Не используйте косую черту, поскольку dirname (..) не использует.

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

Для других языков проверьте функцию, которая извлекает имя пути, и посмотрите, использует ли он косую черту или нет, затем придерживайтесь соглашения языка.

4 голосов
/ 03 августа 2015

Я знаю, что это старая ветка, но я решил поделиться тем, что делаю. Если возможно, я бы обычно разрешал оба варианта и делал что-то вроде этого (если бы это был PHP):

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

Таким образом, если каталог определен в файле конфигурации, не имеет значения, включает ли следующий человек, который его изменит, косую черту или нет.

4 голосов
/ 15 июля 2011

Может быть, вам следует подумать о том, что будет означать ваше решение для файлов. Если вы не включите косую черту в конце имени каталога , вам придется добавить его в начало имени file .

Теперь, если по какой-то причине путь, ведущий к файлу, отсутствует при объединении строк, вы получите что-то вроде /filename, которое является не просто файлом, а абсолютным путем от корневого каталога (где бы это ни быть в этом контексте).

Вот почему я заканчиваю свои пути косой чертой и сохраняю файлы как файлы.

3 голосов
/ 20 декабря 2018

Я знаю, что это 10 лет, но я хотел добавить свои очень самоуверенные 0,02 доллара.

Нет. Абсолютно нет.

Мы говорим о системе Unix. Что касается самого каталога, это узел, как и любой другой. При обращении к каталогу в его имени не должно быть косой черты без экранирования (ref: dirname, pwd, ~, echo $HOME, echo $PATH, вывод из ls и др.) ,

При обращении к содержимому каталога, , а затем вам нужна косая черта. То есть ls /home/karl/ более уместен, чем ls /home/karl (FTR, я почти всегда делаю последнее, потому что ... ну, ленивый).

При использовании переменной, содержащей каталог, для создания полного пути к файлу, вы всегда должны включать косую черту (например, e: cp ${HOME}/test ${OTHER_DIR}/).

ожидается , что каталог не заканчивается косой чертой. Любое ожидание, что каталог заканчивается косой чертой, неверно. Таким образом, добавление косой черты в конец значения *_DIR будет подрывать ожидания.

Стоит ли отмечать, что просто потому, что это неправильно, не означает, что инструменты / пакеты / библиотеки никогда этого не делают. Это слишком распространенное явление, когда такие вещи добавляют косую черту, когда не должно существовать. Поэтому, как предложили Bevan и Paul F , при использовании сторонних инструментов лучше всего удалять любые завершающие косые черты, которые могут существовать в именах каталогов.

Unix Inodes

Inode (индексный узел) - это структура данных в файловой системе в стиле Unix, которая описывает объект файловой системы, такой как файл или каталог.

- https://en.wikipedia.org/wiki/Inode

Стандарт иерархии файловой системы

Стандарт для файловой системы Unix (Стандарт иерархии файловых систем, AKA FHS) ясно показывает, что каталоги не рассматриваются как завершающие косые черты, а содержимое каталогов начинается с косой черты (единственное исключение) это /, потому что мы не будем ссылаться на корень файловой системы, используя пустую строку ... и в любом случае никогда не следует создавать файлы там.)

- http://www.pathname.com/fhs/pub/fhs-2.3.html

- https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

3 голосов
/ 11 июня 2009

Я, как правило, просто добавляю косую черту, поскольку я, скорее всего, собираюсь использовать этот каталог для добавления / получения файлов ...

С точки зрения веб-ссылок это может фактически увеличить производительность, оставляя косую черту в

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

2 голосов
/ 11 июня 2009

Да, существует множество файловых систем, которые поддерживают файлы без каких-либо расширений, поэтому всегда добавляйте косую черту, чтобы избежать каких-либо проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...