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


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

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

рассмотрим эту игрушечную проблему: (Пример 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 160

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

dir name

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    B) basename

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

    D) расширение файла, конечно.

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

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

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

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

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

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

    А) НА

    B) basename

    C) NA

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

    E) или просто путь

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

    Г) НА

    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

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

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