Должна ли переменная пути каталога заканчиваться косой чертой?
Определяя путь к каталогу как переменной или константе, должен ли он заканчиваться конечной косой чертой? Что такое соглашение?
pwd
в unix показывает ваш текущий каталог без завершающей косой черты, в то время как вкладка, состоящая из cd /var/www/apps/
, включает в себя завершающую косую черту, что оставило меня неуверенным.
Ответы
Ответ 1
Я не включаю трейлинг-косую черту, когда я, например, определяю каталог для хранения файлов. Это потому, что я буду использовать его, как
$store_file = "$store_path/$file_id";
Я всегда буду добавлять конечную косую черту перед использованием переменной, которая должна содержать путь к каталогу. Я думаю, что лучше всегда добавлять его, чем задаваться вопросом, включено ли завершающее слэш.
Ответ 2
Я иду с конечной косой чертой, потому что:
-
"Если он заканчивается косой чертой, это каталог. Если нет, это файл". это простое соглашение, которое нужно запомнить.
-
По крайней мере, на операционных системах, которые я обычно использую, удвоение косой черты не вызывает проблем, в то время как отказ от косой черты вызывает большие. Таким образом, наиболее безопасно поместить косую черту в переменную и использовать "$ path/$file" при ее использовании.
Ответ 3
Да, он должен, как:
Pathname + filename = полное местоположение файла.
SO, косая черта между последним каталогом и именем файла должна быть либо в конце пути, либо в начале имени файла. Префикс имен файлов с помощью/означает, что вам нужно принять это во внимание, если вы просто хотите открыть файл (т.е. Если вы предполагаете, что неквалифицированное имя файла находится в текущем рабочем каталоге).
Ответ 4
Всякий раз, когда я храню пути к каталогам или возвращаю их из API, я стараюсь придерживаться соглашения о сохранении косой черты. Это позволяет избежать целого "неоднозначность файла или каталога".
Добавление:
Это не предназначено для замены методов, которые могут переносить либо завершающую косую черту, либо ее отсутствие. Даже используя это соглашение, я все еще всегда использую Path.Combine(...)
и подобные методы.
Ответ 5
Возможно, вам стоит подумать о том, что ваше решение будет означать для файлов. Если вы не включаете конечную косую черту в конце имени каталога, вам нужно добавить ее в начало имени файла.
Теперь, если по какой-то причине путь, ведущий к файлу, отсутствует, когда вы объединяете строки, вы получаете что-то вроде /filename
, которое является не просто файлом, а абсолютным путем из корневого каталога (где бы это ни было в этом контексте).
Вот почему я заканчиваю свои пути косой чертой и сохраняю файлы в виде файлов.
Ответ 6
Я знаю, что это старый поток, но я думал, что буду делиться тем, что делаю. Если возможно, я бы обычно разрешал и то и другое (если это был PHP):
$fullPath = rtrim($directory, '/') . '/filename.txt');
Таким образом, если каталог задан в файле конфигурации, не имеет значения, будет ли следующий человек его изменять, включая конечную косую черту или нет.
Ответ 7
В php, поскольку функция dirname (__ FILE __) возвращает имя каталога без косой черты в конце. Я склонен придерживаться этого соглашения.
В противном случае использование косой черты в конце имени каталога будет конфликтовать с тем, как работает dirname (..), а затем вы застреваете с обработкой двух случаев, так как вы не знаете, было ли имя каталога получено из имени dirname (..) или константу, определенную с конечной косой чертой.
Нижняя строка: Не используйте трейлинг-косую черту, поскольку имя dirname (..) не работает.
// PHP Example
dirname(__FILE__); // returns c:\my\directory without a trailing slash, so stick to it!
Для других языков проверьте функцию, которая извлекает имя пути, и посмотрите, использует ли она конечную косую черту или нет, затем придерживайтесь условного обозначения языка.
Ответ 8
Я знаю, что это 10 лет, но я хотел добавить свои очень самоуверенные 0,02 доллара.
Нет. Абсолютно нет.
Мы говорим о системе Unix. Что касается самого каталога, это узел, как и любой другой. При обращении к каталогу у него никогда не должно быть косой черты в имени (ссылка: dirname
, pwd
, ~
, echo $HOME
, echo $PATH
, выходные данные из ls
и др.),
При обращении к содержимому каталога, вам нужен слеш. То есть, ls /home/karl/
более подходит, чем ls /home/karl
(FTR, я почти всегда делаю последнее, потому что... ну, ленивый).
При использовании переменной, содержащей каталог, для создания полного пути к файлу, вы всегда должны включать косую черту (например, e: cp ${HOME}/test ${OTHER_DIR}/
).
Ожидается, что каталог не заканчивается косой чертой. Любое ожидание, что каталог заканчивается косой чертой, неверно. Таким образом, добавление косой черты в конец значения переменной *_DIR
подорвало бы ожидания.
Стоит ли отмечать, что только потому, что это неправильно, не означает, что инструменты/пакеты/библиотеки никогда не делают этого. Это слишком распространенное явление, когда такие вещи добавляют косую черту, когда ничего не должно существовать. Поэтому, как предложили Беван и Пол Ф., при использовании сторонних инструментов лучше всего удалить любые косые черты, которые могут существовать в именах каталогов.
Unix Inodes
Индод (индексный узел) - это структура данных в файловой системе в стиле 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
Ответ 9
Я обычно добавляю трейлинг-косую черту, так как я более чем вероятно буду использовать этот каталог для добавления/получения файлов...
В терминах веб-ссылок он может фактически увеличить производительность, оставив конечную косую черту в
http://www.netmechanic.com/news/vol4/load_no11.htm
Ответ 10
Да, существует множество файловых систем, которые поддерживают файлы без каких-либо расширений, поэтому всегда добавляйте конечную косую черту, чтобы избежать каких-либо проблем.
Ответ 11
Я никогда не видел твердую конвенцию в любом случае.
Хотя, конечно, что бы вы ни остановились, кто-то еще будет на 100% уверен, что это должно быть наоборот. Итак, лучшая идея состоит в том, чтобы терпеть вещи, установленные в любом случае.
В .NET-мире Path.Combine() предоставляет вам способ справиться с этим - в других средах есть эквиваленты, из cmd файлов вверх.