Подтвердить что ты не робот

Должна ли переменная пути каталога заканчиваться косой чертой?

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

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

4b9b3361

Ответ 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 файлов вверх.