Полностью квалифицированный путь Vs. Канонический Путь - PullRequest
19 голосов
/ 30 августа 2010

В Java существует концепция канонического пути.
И в WinApi есть полный путь.

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

Для файла или каталога, существует ли полностью заданный путь только одно? канонический путь.

Они оба совершенно одинаковые понятия?

Редактировать
Еще кое-что, Ссылка symbloc или жесткая ссылка относятся к полному пути?

Редактировать
Я попросил кого-то, кто ведет страницу Имена файлов, путей и пространств имен , сообщить мне об этом.
И он мне ответил.

Это также полный путь?
C: \ каталог \ .. \ каталог \ file.txt

Технически это относительный путь, поскольку он содержит двойную точку (..), и некоторые API не обрабатывают их правильно (в документах будет четко указано, что ему нужен полный путь).
Оба являются взаимоисключающими.

Что он имеет в виду, по моему предположению, если мы добавим параметр, подобный этому, "C: \ directory \ .. \ directory \ file.txt" в функцию, требующую полный путь, функция никогда не будет интерпретировать путь и затем терпит неудачу.

Если это так, полностью определенный путь полностью совпадает с каноническим путем. Не правда ли.

Ответы [ 2 ]

42 голосов
/ 08 сентября 2010

"Полный путь" является синонимом "абсолютный путь"

  • «Полная квалификация» и «абсолютный путь» означают одно и то же - путь, который не относится к подразумеваемому или заданному контексту.
  • Каждый путь - это либо полный путь , либо это относительный путь
  • Каждое местоположение в файловой системе имеет множество путей, которые можно использовать для ссылки на него, включая многочисленные полные пути :

    • C: \ temp.txt
    • C: \ Program Files \ .. \ temp.txt
    • C: \ Program Files \ Microsoft \ .. \ .. \ temp.txt
    • и т.д.
  • С концептуальной точки зрения один из этих полностью определенных путей - это самый простой и простой способ указать этот ресурс - это ваш канонический путь .

Для файла или каталога, существует ли полностью заданный путь только одно? канонический путь.

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

В чем разница между getPath (), getAbsolutePath () и getCanonicalPath () в Java?

но заменять «полностью квалифицированным» везде, где говорится «абсолютный».

Для ясности, некоторые люди также используют термин "относительный путь", чтобы также ссылаться на путь с "относительной ссылкой" (двойные точки ..) внутри него. Например, некоторые могут назвать C:\Program Files\Microsoft\\..\temp.txt «относительным путем» из-за двойных точек, но я бы назвал его полностью определенным путем с относительной ссылкой. Надеюсь, из разговора станет ясно, что они имеют в виду, когда говорят «относительный путь» (путь относительно контекста или путь с относительной ссылкой в ​​нем).

Они оба совершенно одинаковые понятия?

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

Еще одна вещь. Путь UNC тоже относится к полному пути?

Да, UNC-пути не являются относительными; это полностью определенные пути. - http://msdn.microsoft.com/en-us/library/aa365247(v=VS.85).aspx#fully_qualified_vs._relative_paths

Является ли символическая ссылка или жесткая ссылка полностью указанным путем?

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

Время аналогии

Вы можете думать о путях и ссылках в терминах указаний на чей-то дом:

  • a относительный путь - это направления от вашего текущего местоположения
  • a полностью определенный путь - указатели от ратуши, независимо от того, где вы находитесь
    • В нашем странном маленьком городке Униксвилл все соглашаются и неявно понимают, что "полностью определенные указания" всегда начинаются в ратуше, как это ни странно, суета, которую все называют "/".
    • В следующем городе (Windowsville) есть несколько ратуш (по одному на каждую часть города), которые называются C:\, D:\, E:\ и т. Д.
    • Разные люди могут дать вам разные указания (пути), чтобы добраться до одного и того же дома, даже если они все начинаются с одной и той же начальной точки (ратуша) - некоторые направления будут более прямыми, чем другие.
  • a канонический путь - это полностью определенные указания, которые являются самым простым и простым способом добраться от ратуши до желаемого дома
  • a символическая ссылка isкак пустой лот с пометкой, в которой указываются направления к адресу переадресации
    • тип направлений, которые привели вас сюда (будь то относительные направления, полностью определенные направления или даже канонические полностью определенные направления)не имеет никакого отношения к тому, ведет ли он к дому или любому пустому участку с указанием направления пересылки здесь
    • есть странный случай, когда одна из улиц в вашем направлении на самом деле является символической ссылкой (объезд? портал?) -аналогия здесь разваливается, если мы смотрим на нее слишком внимательно, поэтому давайте просто проигнорируем ее: -)
  • a hard link - это дом, доступный из двух или более разныхадреса.
    • Подумайте о доме на углу улиц Вязов и Мэйн-стрит.Почтовое отделение по ошибке дало ему два адреса: 10 Elm Str и 20 Main Str.Независимо от того, по какому адресу вы идете, вы в конечном итоге окажетесь в одном доме.
    • В нашем странном маленьком городке эти дома с жесткими связями могут иметь несколько адресов, и адреса не обязательно должны быть рядом друг с другом..
    • Независимо от того, по какому адресу вы идете, это один и тот же дом.Это не копия, это не адрес пересылки.Просто волшебным образом, как только вы входите внутрь, вы попадаете в один и тот же дом, независимо от того, какой адрес вы использовали, чтобы попасть туда.
    • указаний, которые привели вас к дому (независимо от того, какой адрес использовался или был линаправления были относительными направлениями, полностью определенными направлениями или даже каноническими полностью уточненными указаниями) не имеет отношения к тому, является ли дом по этому адресу домом с жесткой связью или нет

Приложение

Редактировать

Я попросил кого-нибудь, кто ведет страницу именования файлов, путей и пространств имен, сообщить мне об этом.И он мне ответил.

Это тоже полностью квалифицированный путь?C: \ directory .. \ directory \ file.txt

Интересно, какие термины использовал бы создатель этой страницы, чтобы различать ..\file.txt и C:\directory\..\directory\file.txt, поскольку он называет их обоими относительными путями.Я согласен с тем, что двойные точки являются относительной ссылкой, но я бы не стал обозначать весь путь как относительный, потому что он имеет двойные точки в середине.В его терминологии нет разницы между полностью квалифицированным и каноническим.(В этом, я полагаю, и лежит источник вашего вопроса).

Я пришел из Unix и Java, поэтому, возможно, в этом и есть разница.Как я узнал:

  • относительная / частично определенная - местоположение не может быть определено без информации о соответствующем контексте, например, о текущем рабочем каталоге, текущем диске,текущий каталог диска, параметр PATH оболочки, параметр Java CLASSPATH или URL-адрес ссылки.

  • абсолютная / полностью определенная - местоположение не зависит от связанного контекста, то есть местоположение одинаково независимо от текущего рабочего каталога, текущего диска,текущий каталог диска, параметр оболочки PATH, параметр Java CLASSPATH или URL-адрес ссылки.

  • канонический - самый простой полностью определенный, т. е. двойнойточки

Итак

  • .. \ file.txt - относительно
  • C: \ directory \ ..\ directory \ file.txt - полностью определено
  • C: \ directory \ file.txt - полностью определено и канонично

Этот раздел на странице MSDN не ясен на C:\directory\..\directory\file.txt: если C:\directory\..\directory\file.txt считается относительным и не будет работать с Windows API, который говорит, что ему требуется полная квалификация (но не обязательно каноническая)?) путь, я бы предположил, что страница должна сделать это более понятным.

Полностью квалифицированный и относительный

Имя файла относительно относительно текущего каталога , если оно не начинается с одного из следующих:

... * Обозначение диска с обратной косой чертой, например "C: \" или "d: \". ...

Поскольку C:\directory\..\directory\file.txt начинается с обозначения диска с черной косой чертой, этот путь является полностью определенным, а не относительным.

Путь также называется относительным , если онсодержит «двойные точки» ;то есть два периода вместе в одном компоненте пути.Этот специальный спецификатор используется для обозначения каталога над текущим каталогом , иначе называемого «родительским каталогом».Примеры этого формата:

  • ".. \ tmp.txt" определяет файл с именем tmp.txt, расположенный в родительском каталоге текущего каталога.
  • ".... \ tmp.txt "указывает файл, который находится на две директории выше текущего каталога.
  • " .. \ tempdir \ tmp.txt "указывает файл с именем tmp.txt, расположенный в каталоге с именем tempdirкаталог одноранговой сети к текущему каталогу.

Я интерпретировал фразу , содержащую двойные точки , что означает , ведущий двойные точки.Примеры показывают только ведущие двойные точки.Терминология «текущий каталог» обычно означает текущий рабочий каталог процесса или текущий каталог диска, который имеет отношение, только когда речь идет о начальных двойных точках.Однако я могу видеть, как этот раздел можно интерпретировать по-другому.

Независимо от , все вырастают по-разному, и контекст - это король, поэтому я думаю, что всем нужно быть осторожным снюансы при чтении документов или обсуждении с инженерами различного происхождения о том, что они подразумевают под «полностью квалифицированным» и «относительным» *

0 голосов
/ 30 августа 2010

Нет.IMHO, полный путь позволяет только однозначно найти ресурс (независимо от текущего рабочего каталога, среды PATH и т. Д.), Но два разных пути могут идентифицировать один и тот же ресурс.

Я не знаю о Windowsспособ узнать, если два пути указывают на один и тот же файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...