Я продолжаю зацикливаться на манипуляциях с путями и именами файлов, потому что у меня нет общей системы именования, которую я использую.
Мне нужно придумать стандарт именования и придерживаться его, и я хотел бы быть ясным и последовательным с другими, поэтому я открываюсь, чтобы выучить канонические ответы.
Рассмотрим эту игрушечную проблему: (пример Windows, но, надеюсь, ответ должен быть независимым от платформы)
Вам было дано полное имя папки: C: \ users \ OddThinking \ Documents \ My Source. Вы хотите пройти по папкам внизу и скомпилировать все .src в .obj.
В какой-то момент вы смотрите на следующую строку.
C:\users\OddThinking\Documents\My Source\Widget\foo.src
Итак, какие имена идентификаторов вы бы использовали для частей?
A) foo
B) foo.src
C) src
D) .src
E) C:\users\OddThinking\Documents\My Source\ - i.e. the top of the tree.
F) Widget\foo.src - i.e. the path from the top of the tree to the leaf.
G) Widget - i.e. one node of the tree.
H) C:\users\OddThinking\Documents\My Source\Widget\ - i.e. the name of the folder
I) C:\users\OddThinking\Documents\My Source\Widget\foo.src
Позвольте мне дать несколько ответов, чтобы вы начали.
А) базовое имя?
Б) имя файла? Или это имя файла? Разница важна при выборе имен идентификаторов, и я здесь никогда не согласен.
В) расширение
D) Расширение. Подождите, это то, что я назвал C. Должен ли я избегать хранения точки, и просто вставлять в случае необходимости? Что если в конкретном файле нет точки?
H) путь? Или подождите, это просто путь?
Я) имя файла. Подождите, это то, что я назвал C. Путь. Подождите, это то, что я назвал H. Может быть, H должно быть имя папки. Разве «папка» не является специфичным для Windows термином?
источник
stem
.Ответы:
Я думаю, что ваш поиск «стандартного» соглашения об именах будет напрасным. Вот мои предложения, основанные на существующих, известных программах:
A) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src
Б) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
C) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. SRC (без точки)
D) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (с точкой)
E) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
F) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
G) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
H) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
I) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
источник
1.
(имя файла только без расширения), я решил пойти наFile Title
это давно из-за отсутствия четкого соглашения или хотя бы глобального консенсуса.A
(имя файла без расширения), вы можете использоватьstem
. Ссылки: doc.rust-lang.org/std/path/struct.Path.html#method.file_stem , llvm.org/docs/doxygen/html/… , boost.org/doc/libs/1_60_0/libs/filesystem/ doc /…Хороший вопрос, прежде всего, мой +1. Эта вещь беспокоила меня, когда я однажды должен был создать множество функций в классе Utility. GetFileName? или GetFullName? GetApplicationPath означает полный путь или имя каталога? и так далее. Я родом из .NET, поэтому думаю, что могу добавить немного больше к отличному ответу @blinry.
Резюме: (курсивом я бы не стал программистом)
Путь : Путь указывает уникальное местоположение в файловой системе (если только его относительный путь). Имя пути используется реже, но я бы придерживался пути - он в значительной степени объясняет, что это такое. Путь может указывать на файл или папку, или даже ничего (C: \). Путь может быть:
My Source\Widget\
относительный путь, а такжеWidget\foo.src
. Самоочевидно.C:\users\OddThinking\Documents\My Source\Widget\foo.src
следовательно, полный путь. Посмотрите в конце, что я называю полным путем, который указывает на файл и который заканчивается как каталог.Страницы вики и .NET именование для пути непротиворечивы.
Корневой путь или корневой каталог . Бывший является соглашением .NET, в то время как последний более известен в кругах UNIX. Хотя мне нравятся оба, я склонен использовать первое больше. В Windows, в отличие от UNIX, есть много разных корневых путей, по одному для каждого раздела. Unix-системы имеют один корневой каталог, который содержит информацию о других каталогах и файлах. Например.
C:\
это корневой путь.Имя папки или папки :
Widget
иOddThinking
т. Д. В вашем случае. Это может быть соглашение только для Windows (на самом деле это мое собственное странное мышление :)), тем не менее я категорически не согласен с ответом Блинри «Каталог». Хотя для обычного пользовательского каталога означает то же самое, что и папка (например, подпапки, подкаталоги), я считаю, что с технической точки зрения «каталог» должен звучать как полный адрес цели, а не самой цели. Подробнее ниже.users
OddThinking
иDocuments
являются подпапками.users
OddThinking\
,OddThinking\Documents\
иOddThinking\Documents\My Source\Widget\
являются подкаталогами. Но нам не нужно беспокоиться об этом, не так ли?users
OddThinking
дочерней папки (а также подпапки)OddThinking
users
- это ее родительская папка (просто упоминание различных терминов, ничего страшного).Каталог или Имя каталога : первый обычно используется в реальной жизни, второй - в коде. Это относится к полному пути (или просто полному пути ) до родительской папки цели . В вашем случае
C:\users\OddThinking\Documents\My Source\Widget
(Да, каталог никогда не должен указывать на файл). Я использую имя каталога в своем коде, так как каталог - это класс в .NET, а имя каталога - это то, что сама библиотека называет его. Это вполне соответствует dirname, используемому в системах UNIX.Имя файла или базовое имя: имя файла вместе с расширением. В вашем случае:
foo.src
. Я бы сказал, что для нетехнического использования я предпочитаю имя файла (это то, что оно означает для конечного пользователя), но в технических целях я бы строго придерживался базового имени . Имя файла часто используется MS, но я удивлен, как они не согласованы не только в документации, но даже в библиотеке . Там имя файла может означать либо базовое имя, либо полный путь к файлу. Так что я предпочитаю базовое имя, это то, что я называю их в коде. Эта страница в вики также говорит, что имя файла может означать либо полный путь, либо базовое имя. Удивительно, но даже в .NET я могу найти использование базового имени для обозначения корневого имени файла.Расширение или файла расширение или расширение файла : Я , как последний. Все относится к одному и тому же, но что это опять вопрос спора! Вики говорят, что в
src
то время я помню, что читал, что многие языки интерпретируют это как.src
. Обратите внимание на точку. Итак, еще раз мое мнение, для случайного использования не имеет значения, что это такое, но как программист я всегда вижу расширение как.src
.Хорошо, я мог попытаться получить некоторые стандартные правила, но вот два из моих соглашений, которым я следую. И это о полных путях.
Я обычно называю полный путь, который указывает на файл как путь к файлу . Для меня путь к файлу является четким, он говорит мне, что это такое. Хотя с именем файла я нахожу его как имя файла, в своем коде я называю его именем файла . Это также согласуется с « именем каталога ». С технической стороны имя относится к полностью квалифицированному имени! Разочаровывающе .NET использует термин имя файла (поэтому у меня есть мой случай здесь) и иногда путь к файлу для этого.
Я называю полный путь, который заканчивается как каталог каталогом. На самом деле любой адрес, который не указывает на файл, можно назвать каталогом. Таков
C:\users\OddThinking\Documents\My Source\
каталог,C:\users\OddThinking\
каталог или дажеOddThinking\Documents\My Source\
(лучше назвать его подкаталогом или даже лучше относительный путь - все, что зависит от контекста, с которым вы работаете). Выше я упомянул что-то другое о каталоге, который является именем каталога. Вот мое мнение: я найду новый путь, чтобы избежать путаницы. Что этоD:\Fruit\Apple\Pip\
? Каталог. Но если вопрос в том, каков каталог или даже лучше имя каталогаD:\Fruit\Apple\Pip\
, ответ таковD:\Fruit\Apple\
. Надеюсь, это ясно.Я бы сказал, что лучше не беспокоиться о последних двух терминах, поскольку именно это создает наибольшую путаницу (лично для меня). Просто используйте термин полный путь !
Чтобы ответить вам:
по отношению к пути, который вы дали
А) Понятия не имею. В любом случае, мне никогда не нужно было оставлять его одного.
Б) базовое имя
C) Я бы просто назвал это расширением файла на данный момент, я меньше всего волнуюсь, так как мне никогда не нужно было, чтобы одно это было указано в моем коде.
Г) расширение файла обязательно.
E) Я не думаю, что это требование общего назначения. Без понятия. В .NET базовый каталог совпадает с именем каталога.
F) относительный путь
Г) папка (родительская папка с базовым именем
foo.src
)H) имя каталога
I) полный путь (или даже имя файла)
в общем (извините за то, что я немного многословен, просто чтобы понять суть), но предположим, что
foo.src
это действительно файлА) нет
Б) базовое имя
В) нет данных
Г) расширение
E) каталог или просто путь
F) относительный путь
Г) нет
H) каталог или просто путь
I) полный путь (или даже имя файла)
Далее вождение с одним примером с моей стороны:
Рассмотрим путь
C:\Documents and Settings\All Users\Application Data\s.sql
.C:\Documents and Settings\All Users\Application Data\s.sql
полный путь (который является именем файла)C:\Documents and Settings\All Users\Application Data\
это имя каталога.Теперь рассмотрим путь
C:\Documents and Settings\All Users\Application Data
C:\Documents and Settings\All Users\Application Data
полный путь (который является каталогом)C:\Documents and Settings\All Users
это имя каталога.Две мои подсказки:
Я придерживаюсь этого практического правила: когда дело доходит до адресации полного адреса независимо от его типа, я почти всегда называю его «полным путем». Это не только исключает использование двух терминов для пути к файлу и пути к папке, но также позволяет избежать путаницы, если вы собираетесь назвать этот файл как имя файла (что для большинства пользователей сразу переводится как basename). Но да, если вам нужно определиться с типом пути, лучше назвать его, чем имя файла или каталог, а не более общий «путь».
Что бы это ни было, вы должны иметь в виду свою собственную идею, быть последовательной с ней во всем. Есть согласие среди членов команды, что это означает это, а не это.
Теперь, когда у меня есть круг, у меня есть практика. Новый бренд терминов будет то, что используется на OS X и Android-машинах. И все это только о физических путях в файловой системе. В случае веб-адресов возникнет целый новый набор терминов. Я ожидаю, что кто-то заполнит пустоту в этой же теме :) Я был бы рад услышать соглашение, с которым вы продвинулись ..
источник
В C ++ Boost.Filesystem разработала номенклатуру для различных частей пути. Подробности смотрите в справочной документации по разложению пути , а также в этом руководстве. .
Вот резюме на основе учебника. Для:
c:\foo\bar\baa.txt
/foo/bar/baa.txt
ты получаешь:
Стандарт C ++ ISO / IEC 14882: 2017
Более того, терминология Boost.Filesystem была принята C ++ 17 => См.
std::filesystem
источник
path
,fullpath
?stem()
это часть имени файла , а не путь .pathlib
Стандартная библиотека Python имеет отличное соглашение об именах для компонентов пути: https://docs.python.org/3/library/pathlib.htmlа) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src
б) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
c) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. SRC (без точки)
г) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (с точкой)
e) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
f) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
g) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
h) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
я) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
источник
Нет, ты не сумасшедший.
В системах Windows иногда путь к каталогу, содержащему файл , называется путем , который был с самого начала. Так, например,
Подход Unix / Linux намного более логичен, и это то, что все упоминали выше: путь, включая само имя файла. Однако, если вы наберете "call /?" в командной строке Windows вы получите это:
Таким образом, это «только путь» и «только имя файла». В то же время они ссылаются на всю строку как «полное имя пути», которое понимается как буква диска плюс путь плюс имя файла. Так что нет настоящей правды. Это бесполезно. Вы были преданы.
Тем не мение,
Ответить на ваш вопрос
Вот как бы я назвал ваши примеры:
У ADEF нет простых ников. И поскольку php, вероятно, является наиболее широко известным кроссплатформенным языком, все понимают «базовое имя» и «dirname», поэтому я буду придерживаться этого названия. Полное имя также очевидно; Полный путь будет немного двусмысленным, но в большинстве случаев это означает одно и то же.
источник