Имя файла? Имя пути? Базовое имя? Стандарт именования фрагментов пути

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

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

рассмотрим эту игрушечную проблему: (Пример 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) имя файла? Или это имя файла? Разница важна при выборе имен идентификаторов, и I я никогда не последователен здесь.

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 источник\виджет\foo.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

dir name

I)C:\users\OddThinking\Documents\My источник\виджет\foo.src

полный/абсолютный путь


хороший вопрос прежде всего, мой +1. Эта вещь беспокоила меня, когда мне однажды пришлось создать множество функций в служебном классе. GetFileName? или GetFullName? GetApplicationPath означает полный путь или имя каталога? и так далее. Я пришел из .NET background, поэтому я думаю, что могу добавить немного больше к отличному ответу @blinry.

резюме: (курсивом является то, что я бы не использовал в качестве программист)

  1. путь: Path указывает уникальное расположение в файловой системе (если только его относительный путь). Имя пути используется реже, но я бы придерживался пути - это в значительной степени объясняет, что это такое. Путь может указывать на файл или папку или даже ничего (с:\). Путь может быть:

    1. Относительный Путь: My Source\Widget\ относительный путь, а также Widget\foo.src. Пояснений.
    2. Абсолют Путь или Полный Путь: это полный путь, который указывает на цель. Последнее я использую чаще. C:\users\OddThinking\Documents\My Source\Widget\foo.src, следовательно, полный путь. См. в конце то, что я называю полным путем, который указывает на файл и заканчивается как каталог.

    на страница wiki и .NET именование для путь согласуется.

  2. Корень Путь или Корневого Каталога: Бывший .Пока последняя чистая конвенции еще слышал в кругах в Unix. Хотя мне нравится и то, и другое, я предпочитаю первое. В windows, в отличие от UNIX, есть много разных корневых путей, по одному для каждого раздела. Системы Unix имеют один корневой каталог, который содержит информацию о других каталогах и файлах. Например. C:\ - это корневой путь.

  3. папку или Имя Папки: Widget, OddThinking etc в вашем случае. Это может быть соглашение только для Windows (в факт его собственного странного мышления :)), тем не менее я категорически возражаю против ответа blinry "Directory". Хотя для обычного пользователя каталог означает тот же как папка (например, подпапки, подкаталоги), я считаю, что с технической точки зрения "каталог" должен звучать как квалифицированный адрес цели, а не сама цель. Еще ниже.

    1. Вложенные Папки: с уважением users OddThinking и Documents суб папки.
    2. Каталоги: с уважением users OddThinking\, OddThinking\Documents\ и OddThinking\Documents\My Source\Widget\ несколько вложенных каталогов. Но мы не часто должны беспокоиться об этом, не так ли?
    3. Папка: с уважением users OddThinking является дочерней папкой (а также подпапкой)
    4. Папку: For OddThinking users является его родительской папкой (просто упоминая разные терминологии, не большие сделка.)
  4. каталог или Имя Директории: первый использовать в основном в реальной жизни, последний быть в коде. Это относится к полному пути (или просто полный путь) до цели папку. В твоем случае, C:\users\OddThinking\Documents\My Source\Widget (да, каталог никогда не должен указывать на файл). Я использую имя каталога в своем коде, так как каталог-это класс в .NET, а имя каталога-это то, что сама библиотека называет это. Его вполне согласуется с dirname используется в системах UNIX.

  5. Имя Файла или имени: название файла вместе с расширением. В вашем случае: foo.src. Я бы сказал, что для нетехнического использования я предпочитаю имя файла (это то, что это означает для конечного пользователя), но для технических целей я бы строго придерживаться имени. Имя файла часто используется MS,но я удивлен, как они не согласуются не только в документации, но даже в библиотеке. Там filename может означать либо базовое имя, либо полный путь к файлу. Поэтому я предпочитаю basename, вот как я их называю в коде. на этой странице на wiki тоже говорит, что имя файла может означать либо полный путь, либо базовое имя. Удивительно, но даже в .NET я могу найти базовое имя использования, означающее корневое имя файл.

  6. расширение или Расширение Имени Файла или Расширение: мне нравится последний. Все относится к одному и тому же, но что это такое, опять же является предметом обсуждения! Wiki говорит src в то время как тогда я помню, что читал, что многие языки интерпретируют его как .src. Обратите внимание на точку. Так что еще раз мое мнение, для случайного использования не имеет значения, что это такое, но как программист я всегда вижу расширение как .src.

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

    1. я обычно называю полный путь ссылки на файл путь к файлу. Для меня путь к файлу ясен, он говорит мне, что это такое. Хотя с именем файла я нахожу его как имя файла, в моем коде я называю его имя файла. Это также согласуется с " имя". С технической стороны название относится к полному имени! К сожалению, .NET использует имя файла термина (поэтому у меня есть мой случай здесь), а иногда и путь к файлу для этого.

    2. я называю полный путь, который заканчивается В КАТАЛОГ КАТАЛОГ. На самом деле можно назвать любую часть адреса, которая не указывает на файл, каталогом. Так что C:\users\OddThinking\Documents\My Source\ - каталог, C:\users\OddThinking\ - каталог, или даже OddThinking\Documents\My Source\ (лучше назвать его подкаталогом или даже лучшим относительным путем - все зависит от контекста, с которым вы имеете дело). Хорошо выше я упомянул что-то другое о каталоге, который является именем каталога. Вот мой взгляд на это: я найду новый путь, чтобы избежать путаницы. Что это?!--25-->? Справочник. Но если вопрос в том, что такое каталог или даже лучше имя каталога D:\Fruit\Apple\Pip\ ответ D:\Fruit\Apple\. Надеюсь, все ясно.

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

чтобы ответить вам:

  1. по отношению к пути, который вы дали

    A) понятия не имею. В любом случае, мне никогда не нужно было делать это в одиночку.

    B) базовое имя

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

    D) расширение файла, безусловно.

    E) я не думаю, что это требование общего назначения. Без понятия. В .NET базовый каталог совпадает с именем каталога.

    F) относительный путь

    G) папка (родительская папка с базовым именем foo.src)

    H) имя каталога

    I) полный путь (или даже имя файла)

  2. в общем (извините за то, что немного многословен, просто доказать), но при условии foo.src действительно файл

    А) НА

    B) базовое имя

    C) NA

    D) расширение

    E) каталог или просто путь

    F) относительный путь

    G) NA

    H) каталог или просто путь

    I) полный путь (или даже имя файла)

двигаясь с один пример из моей сторона:

  1. рассмотрим путь C:\Documents and Settings\All Users\Application Data\s.sql.

    1. C:\Documents and Settings\All Users\Application Data\s.sql - это полный путь (имя файла)
    2. C:\Documents and Settings\All Users\Application Data\ - имя каталога.
  2. Теперь рассмотрим путь C:\Documents and Settings\All Users\Application Data

    1. C:\Documents and Settings\All Users\Application Data - это полный путь (который является каталогом)
    2. C:\Documents and Settings\All Users - каталог имя.

два моих кончика:

  1. я следую этому эмпирическому правилу, что, когда дело доходит до адресации полного адреса независимо от его типа, я почти всегда называю его "полный путь". Это не только исключает использование двух терминологий для пути к файлу и пути к папке, но также позволяет избежать потенциальной путаницы, если вы собираетесь назвать файл именем файла (что для большинства пользователей сразу приводит к имени файла). Но да, если вы должны быть конкретными о типе пути, его лучше назвать, то имя файла или каталог вместо более общего "пути".

  2. что бы вы ни имели в виду, будьте последовательны с ним во всем. Имейте консенсус среди членов команды, что это означает это, а не то.

теперь, когда только из круга у меня есть некоторая практика. Новый бренд терминов будет использоваться в 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

вот так, "путь" и "имя файла"только. В то же время они ссылаются на всю строку как "полное имя", которое понимается как буква диска и путь плюс имя файла.

Я просто говорю это, чтобы все не винили себя за беспорядок в голове вокруг этой темы. все в порядке. ты не сумасшедший. Имена путей:)