Имя файла? Имя пути? Базовое имя? Стандарт именования для отрезков пути
Я продолжаю получать себя в узлах, когда я манипулирую путями и именами файлов, потому что у меня нет общей системы именования, которую я использую.
мне нужно придумать стандарт именования и придерживаться его, и я хотел бы быть ясным и последовательным с другими, поэтому я открываюсь, чтобы узнать канонические ответы.
рассмотрим эту игрушечную проблему: (Пример Windows, но, надеюсь, ответ должен быть независимым от платформы)
вам дали полное имя a папка: C:usersOddThinkingDocumentsMy источник. Вы хотите пройтись по папкам внизу и скомпилировать все .src to .параметр obj.
в какой-то момент Вы смотрите на следующую строку.
C:usersOddThinkingDocumentsMy SourceWidgetfoo.src
Итак, какие имена идентификаторов вы бы использовали для деталей?
A) foo
B) foo.src
C) src
D) .src
E) C:usersOddThinkingDocumentsMy Source - i.e. the top of the tree.
F) Widgetfoo.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:usersOddThinkingDocumentsMy SourceWidget - i.e. the name of the folder
I) C:usersOddThinkingDocumentsMy SourceWidgetfoo.src
позвольте мне дать некоторые ответы, чтобы вы начали.
а) название базы?
B) имя файла? Или это имя файла? Разница важна при выборе имен идентификаторов, и я я никогда не последователен здесь.
C) Расширение
D) Расширение. Подождите, это то, что я назвал C. должен ли я избегать хранения точки и просто вставлять ее при необходимости? Что делать, если на конкретном файле нет точки?
H) имя пути? Или подождите, это просто путь?
I) имя файла. Подождите, это то, что я назвал C. Path. Подождите, это то, что я назвал H. возможно, H должно быть имя папки. Разве "папка" не является специфичным для Windows термином?
4 ответа:
Я думаю, что ваш поиск "стандартного" соглашения об именах будет напрасным. Вот мои предложения, основанные на существующих, известных программах:
A) C:\users\OddThinking\Documents\My Источник \ Виджет\фу.src
ВИМ называет это корневую файл (: help filename-modifiers)
B) C:\users\OddThinking\Documents\My Источник \ Виджет\фу.src
C) C:\users\OddThinking\Documents\My источник\виджет\фу. src(без точки)
D) C:\users\OddThinking\Documents\My источник \ виджет\foo.src(С точкой)
и расширение. Просто хранить без точки, если нет точки на файле, он не имеет расширение
E)C:\users\OddThinking\Documents\My Источник\виджет\foo.src
верхушка дерева
Нет конвенции, git называет это база каталогаF) C:\users\OddThinking\Documents\My Источник\виджет\foo.src
путь от вершины дерева к листьям
относительный путьG) C:\users\OddThinking\Documents\My Источник\виджет \foo.src
один узел дерева
нет конвенции, может быть, просто каталогH)C:\users\OddThinking\Documents\My Источник\Виджет\фу.src
I)C:\users\OddThinking\Documents\My источник\виджет\фу.src
хороший вопрос в первую очередь, мой +1. Эта вещь не давала мне покоя, когда мне однажды пришлось создать множество функций в классе утилит. GetFileName? или GetFullName? GetApplicationPath означает полный путь или имя каталога? и так далее. Я пришел из .NET фона, поэтому я думаю, что могу добавить немного больше, чтобы в противном случае отличный ответ от @blinry.
резюме: (курсив-это то, что я бы не использовал в качестве программист)
путь: Path указывает уникальное расположение в файловой системе (за исключением относительного пути). Имя пути используется реже, но я бы придерживался пути - это в значительной степени объясняет, что это такое. Путь может указывать на файл или папку или даже ничего (с:\). Путь может быть:
- Относительный Путь:
My Source\Widget\
относительный путь, а такжеWidget\foo.src
. Само собой разумеется.- Абсолют Путь или Полный Путь: это полный путь, который указывает на цель. Я склонен использовать последнее чаще.
C:\users\OddThinking\Documents\My Source\Widget\foo.src
, следовательно, полный путь. См. в конце то, что я называю полным путем, который указывает на файл и который заканчивается как каталог.The вики-страницы и .NET именование для путь согласуется.
Корень Путь или Корневого Каталога: Первый - это соглашение .NET, в то время как последний больше слышен в кругах UNIX. Хотя мне нравятся оба, я склонен использовать первое больше. В windows, в отличие от UNIX, есть много разных корневых путей, по одному для каждого раздела. Системы Unix имеют один корневой каталог, который содержит информацию о других каталогах и файлах. Например.
C:\
- это корневой путь.папку или Имя Папки:
Widget
,OddThinking
etc в вашем случае. Это может быть соглашение только для Windows (in факт это мое собственное странное мышление :)), тем не менее я категорически возражаю против ответа blinry "каталог". Хотя для обычного пользователя каталог означает тот же как папка (например, подпапки, подкаталоги), я считаю, что с технической точки зрения "каталог" должен звучать как квалифицированный адрес цели, а не сама цель. Еще ниже.
- Вложенные Папки: с уважением
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.Имя Файла или Basename: название файла вместе с расширением. В вашем случае:
foo.src
. Я бы сказал, что для нетехнического использования я предпочитаю имя файла (это то, что это означает для конечного пользователя), но для технических целей я бы строго придерживаться basename. Имя файла часто используется MS,но я удивлен, как они не согласуются не только в документации, но даже в библиотеке. Там имя файла может означать либо базовое имя, либо полный путь к файлу. Поэтому я предпочитаю basename, это то, что я называю их в коде. на этой странице на wiki тоже говорит, что имя файла может означать либо полный путь, либо базовое имя. Удивительно, но даже в .NET я могу найти базовое имя использования, чтобы означать корневое имя файл.расширение или Расширение или Расширение: мне нравится последний. Все относится к одному и тому же, но что это опять же вопрос дискуссии! Wiki говорит
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\
. Надеюсь, все ясно.я бы сказал, что лучше не беспокоиться о последних двух терминах, так как это то, что создает большая путаница (лично для меня). Просто используйте термин полный путь!
чтобы ответить вам:
по отношению к пути, который вы дали
а) без понятия. В любом случае, мне никогда не нужно было делать это в одиночку.
B) basename
C) я бы просто назвал это расширение файла на время, я меньше всего беспокоюсь, так как мне это никогда не было нужно один, чтобы быть названным в моем коде.
D) расширение файла, конечно.
E) я не думаю, что это требование общего назначения. Без понятия. В .NET базовый каталог совпадает с именем каталога.
F) относительный путь
G) папка (родительская папка с базовым именем
foo.src
)H) имя каталога
I) полный путь (или даже имя файла)
в общем (извините за то, что немного многословен, просто доказать), но при условии
foo.src
это действительно файлА) НА
B) basename
C) NA
D) расширение
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
- каталог имя.два моих совета:
я следую этому эмпирическому правилу, что когда дело доходит до адресации полного адреса независимо от его типа, я почти всегда называю его "полный путь". Это не только исключает использование двух терминологий для пути к файлу и пути к папке, но и позволяет избежать потенциальной путаницы, если вы собираетесь назвать файл именем файла (что для большинства пользователей сразу приводит к имени файла). Но да, если вам нужно быть конкретным о типе пути, его лучше назвать именем файла или каталогом вместо более общего "пути".
что бы это ни было, у вас будет своя собственная идея, будьте последовательны с ней во всем. Есть консенсус среди членов команды, что это означает это, а не то.
теперь, что только из круга у меня есть некоторая практика. Новый бренд терминов будет то, что используется на OS X и андроидные машины. И все это только о физических путях в файловой системе. В случае веб-адресов возникнет целый новый набор терминологий. Я ожидаю, что кто-то заполнит пустоту в этой же теме :) я был бы рад услышать конвенцию, с которой вы пошли вперед..
В C++, импульс.Файловая система разработал номенклатуру для различных частей пути. Смотрите разложения путь справочная документация для деталей, а также это учебник.
вот резюме, основанное на учебнике. Ибо:
- путь к Windows:
c:\foo\bar\baa.txt
- в Unix путь:
/foo/bar/baa.txt
вы получаете:
Part Windows Posix -------------- --------------- --------------- Root name c: <empty> Root directory \ / Root path c:\ / Relative path foo\bar\baa.txt foo/bar/baa.txt Parent path c:\foo\bar /foo/bar Filename baa.txt baa.txt Stem baa baa Extension .txt .txt
стандарт ISO/IEC C++ 14882:2017
Кроме Того Повышение.Терминология файловой системы была принята C++17 => посмотреть
std::filesystem
Function name Meaning ---------------- ------------------------------- root_name() Root-name of the path root_directory() Root directory of the path root_path() Root path of the path relative_path() Path relative to the root path parent_path() Path of the parent path filename() Path without base directory (basename) stem() Filename without extension extension() Component after last dot
в системах Windows, иногда каталог, содержащий файл называется путь, как это было с самого начала. Так, например,
d:\dir1\dir2\myfile.txt
понимается как:
PATH = "d:\dir1\dir2" FILE = "myfile.txt"
подход Unix / Linux намного более логичен, и это то, что все упоминали выше: полный путь, включая само имя файла. Однако, если вы наберете " call /?"в командной строке Windows, вы получите это:
%~1 - expands %1 removing any surrounding quotes (") %~f1 - expands %1 to a fully qualified path name %~d1 - expands %1 to a drive letter only %~p1 - expands %1 to a path only %~n1 - expands %1 to a file name only %~x1 - expands %1 to a file extension only
Так оно и есть, "только путь"и" только имя файла". В то же время они ссылаются на всю строку как "полное имя", которое понимается как буква диска и путь плюс имя файла.
Я просто говорю это, чтобы все не обвиняли себя в беспорядке в своей голове вокруг этой темы. все в порядке. ты не сумасшедший. Имена путей:)