stringtranslate.com

Путь (вычисления)

Путь (или путь к файлу , путь к файлу , имя_пути или что-то подобное) — это строка символов , используемая для уникальной идентификации местоположения в структуре каталогов . Она составлена ​​в соответствии с иерархией дерева каталогов , в которой компоненты, разделенные разделительным символом, представляют каждый каталог. Разделительным символом чаще всего является косая черта ("/"), обратная косая черта ("\") или двоеточие (":"), хотя некоторые операционные системы могут использовать другой разделитель . Пути широко используются в информатике для представления отношений каталог/файл, распространенных в современных операционных системах, и имеют важное значение при построении унифицированных указателей ресурсов (URL). Ресурсы могут быть представлены как абсолютными, так и относительными путями.

История

Multics впервые представила иерархическую файловую систему с каталогами (разделенными символом ">") в середине 1960-х годов. [1]

Около 1970 года в Unix в качестве разделителя каталогов был введен символ косой черты («/»).

В 1981 году была выпущена первая версия Microsoft DOS . MS-DOS 1.0 не поддерживала каталоги файлов. Кроме того, большая часть служебных команд, поставляемых с MS-DOS 1.0, пришла из IBM , и их синтаксис командной строки использовал символ косой черты в качестве префикса «переключателя». Например, dir /wзапускает dirкоманду с опцией формата широкого списка.

Такое использование слеша все еще можно найти в командном интерфейсе Microsoft Windows . В отличие от этого, Unix использует символ дефис-минус ("-") в качестве префикса переключателя командной строки.

Когда поддержка каталогов была добавлена ​​в MS-DOS в версии 2.0, "/" был сохранен в качестве префикса переключателя для обратной совместимости . Microsoft выбрала символ обратной косой черты ("\") в качестве разделителя каталогов, который выглядит похоже на символ косой черты, хотя более современные версии Windows являются нечувствительными к косой черте, что позволяет смешивать оба типа косой черты в пути. [2] [3]

Абсолютные и относительные пути

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

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

Базовый URL-адрес

Базовый URL-адрес — это постоянная часть пути API, к которой добавляются пути конечных точек.

Представление путей по операционной системе и оболочке

Японские и корейские версии Windows часто могут отображать символ « ¥ » или символ « ₩ » вместо разделителя каталогов. В таких случаях код для обратной косой черты отображается как эти символы. Очень ранние версии MS-DOS заменили обратную косую черту этими глифами на дисплее, чтобы сделать возможным их отображение программами, которые понимают только 7-битный ASCII (другие символы, такие как квадратные скобки, также были заменены, см. ISO 646 , Windows Codepage 932 (японский Shift JIS) и Codepage 949 (корейский)). Хотя даже первая версия Windows поддерживала 8-битный набор символов ISO-8859-1 , в котором знак йены находится в положении U+00A5, а современные версии Windows поддерживают Unicode , в котором знак воны находится в положении U+20A9, многие программы будут продолжать отображать обратные косые черты, найденные в файлах ASCII, таким образом, чтобы сохранить обратную совместимость. [8]

Mac OS X , как производная от UNIX, использует пути UNIX внутри себя. Однако, чтобы сохранить совместимость для программного обеспечения и привычность для пользователей, многие части GUI переключают "/", введенные пользователем, на ":" внутри, и переключают их обратно при отображении имен файлов (введенный пользователем ":" также меняется на "/", но обратного перевода не происходит).

Пути в языках программирования

Языки программирования также используют пути. Например: Когда файл открыт. Большинство языков программирования используют представление пути базовой операционной системы:

 uxFile = fopen("project/readme.txt", "r")
 winFile = fopen("C:\\Program Files\\bin\\config.bat", "r")

Этот прямой доступ к путям операционной системы может препятствовать переносимости программ. Для поддержки переносимых программ Java использует File.separator для различения путей, разделенных / и \. Seed7 имеет другой подход к представлению путей. В Seed7 все пути используют соглашение о путях Unix, независимо от операционной системы. В Windows происходит сопоставление (например: путь /c/users сопоставляется с c:\users ).

Универсальное соглашение об именовании

Microsoft Windows UNC , сокращение от Universal Naming Convention или Uniform Naming Convention , определяет общий синтаксис для описания местоположения сетевого ресурса, такого как общий файл, каталог или принтер. Синтаксис UNC для систем Windows имеет общую форму:

\\ИмяКомпьютера\ОбщаяПапка\Ресурс

Microsoft часто называет это « сетевым путем ».

Некоторые интерфейсы Microsoft Windows также допускают или требуют синтаксис UNC для доступа к общему ресурсу WebDAV , а не URL. Синтаксис UNC расширен [9] дополнительными компонентами для обозначения использования SSL и номера порта TCP/IP, URL WebDAV http[s]://HostName[:Port]/SharedFolder/Resourceстановится

\\ИмяХоста[@SSL][@Порт]\ОбщаяПапка\Ресурс

При удаленном просмотре "SharedFolder" может иметь имя, отличное от того, которое программа на сервере видит при открытии "\SharedFolder". Вместо этого имя SharedFolder состоит из произвольного имени, назначенного папке при определении ее "общего доступа".

Некоторые интерфейсы Microsoft Windows также принимают «Long UNC»:

\\?\UNC\ИмяКомпьютера\ОбщаяПапка\Ресурс

Microsoft Windows использует следующие типы путей:

В версиях Windows до Windows XP только API, принимающие «длинные» пути к устройствам, могли принимать более 260 символов.

Оболочка в Windows XP и Windows Vista , explorer.exe , допускает имена путей длиной до 248 символов. [ необходима цитата ]

Поскольку UNC начинаются с двух обратных косых черт, а обратная косая черта также используется для экранирования строк и в регулярных выражениях , это может привести к экстремальным случаям синдрома наклонной зубочистки : экранированная строка для регулярного выражения, соответствующего UNC, начинается с 8 обратных косых черт – \\\\\\\\– потому что и строка, и регулярное выражение требуют экранирования. Это можно упростить, используя необработанные строки , как в C# @"\\\\"или Python r'\\\\', или литералы регулярных выражений, как в Perl qr{\\\\}.

Определение имени пути POSIX

Большинство Unix-подобных систем используют похожий синтаксис. [13] POSIX позволяет обрабатывать путь, начинающийся с двух слешей, в соответствии с реализацией, [14] хотя в других случаях системы должны обрабатывать несколько слешей как одиночные. [15] Многие приложения в Unix-подобных системах (например, scp , rcp и rsync ) используют определения ресурсов, такие как:

имя_хоста:/путь_к_каталогу/ресурс

или схемы URI с именем сервиса (здесь «smb»):

smb://имя_хоста/путь_к_каталогу/ресурс

Пример

Unix-стиль

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

Прикреплено к текущему рабочему каталогу (cwd):

/пользователи/марк/

Требуется изменить текущий рабочий каталог на:

/пользователи/марк/bobapples

В этот момент относительный путь к нужному каталогу можно представить так:

./bobapples

или для краткости:

бобапплы

и абсолютный путь к каталогу:

/пользователи/марк/bobapples

Если bobapples указать в качестве относительного пути к нужному каталогу, в командной строке можно ввести следующее, чтобы изменить текущий рабочий каталог на bobapples:

cd bobapples

Две точки (" .. ") указывают вверх в иерархии , чтобы указать родительский каталог ; одна точка (" . ") представляет сам текущий каталог. Оба могут быть компонентами сложного относительного пути (например, " ../mark/./bobapples "), где " . " отдельно или как первый компонент такого относительного пути представляет рабочий каталог . (Использование " ./foo " для ссылки на файл " foo " в текущем рабочем каталоге иногда может быть полезным для отличия его от ресурса " foo ", который можно найти в каталоге по умолчанию или другими способами; например, для просмотра определенной версии страницы руководства вместо той, которая установлена ​​в системе.)

Стиль MS-DOS/Microsoft Windows

Скриншот командной оболочки Windows , показывающий имена файлов в каталоге

Вопреки распространенному мнению, системный API Windows принимает слэш, и поэтому все приведенные выше примеры Unix должны работать. Но многие приложения в Windows интерпретируют слэш для других целей или считают его недопустимым символом, и поэтому требуют ввода обратного слэша – в частности, оболочка cmd.exe (часто называемая «терминалом», поскольку она обычно запускается в окне терминала). Обратите внимание, что многие другие оболочки, доступные для Windows, такие как tcsh и Windows PowerShell , допускают слэш.

Кроме того, "\" не указывает на один корень, а вместо этого на корень "текущего диска". Указание файла на диске, отличном от текущего, требует префикса в виде буквы диска и двоеточия. Никакой двусмысленности не возникает, поскольку двоеточие не является допустимым символом в имени файла MS-DOS, и, таким образом, в текущем каталоге не может быть файла с именем "A:".

Имена UNC (любой путь, начинающийся с \\?\ ) не поддерживают косые черты. [4]

В следующих примерах показаны пути в стиле MS-DOS / Windows , в которых для соответствия наиболее распространенному синтаксису используются обратные косые черты:

А:\Temp\Файл.txt

Этот путь указывает на файл с именем File.txt , расположенный в каталоге Temp , который в свою очередь находится в корневом каталоге диска A :.

C:..\Файл.txt

Этот путь ссылается на файл File.txt, расположенный в родительском каталоге текущего каталога на диске C :.

Папка\Подпапка\Файл.txt

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

Файл.txt

Этот довольно простой путь указывает на файл с именем, File.txtрасположенный в текущем каталоге (поскольку в пути отсутствует спецификация каталога) на текущем диске (поскольку спецификация диска отсутствует).

\\.\COM1

Этот путь относится к первому последовательному порту ( COM1 ).

C:\> больше < C:/Windows/system.ini
; для поддержки 16-битных приложений [386Enh] woafont = dosapp.fon EGA80WOA.FON = EGA80WOA.FON EGA40WOA.FON = EGA40WOA.FON CGA80WOA.FON = CGA80WOA.FON CGA40WOA.FON = CGA40WOA.FON ...

В этом примере используется путь, содержащий слеши в качестве разделителя каталогов. Команда перенаправляет содержимое файла в moreкоманду.

E:\> dir  "/Folder/SubFolder/" /Q Том на диске E — это том данных, серийный номер — 07BE-0B10Каталог E:\Folder\SubFolder18 октября 2008 г. 08:15 <DIR> DOMAIN\user . 18 октября 2008 г. 08:15 <DIR> DOMAIN\user .. 18 октября 2008 г. 08:15 <DIR> DOMAIN\user Файл.txt  1 Файл(ы) 8 байт  2 Каталог(и) 19 063 000 байт свободно

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

CD "[буква диска]:/Program Files" будет работать только из корневого каталога ([буква диска]:\). Похоже, что это обрабатывает все прямые слеши так же, как .\. [ необходима цитата ]

Например:

Компакт-диск "C:.\Program Files"

работает так же как

Компакт-диск "C:/Program Files"

Также из корневой папки:

Компакт-диск "C:.\Program Files.\Internet Explorer"

будет рассматриваться так же, как

Компакт-диск "C:/Program Files/Internet Explorer"

Если относительный путь к имени каталога, указанному с помощью косых черт, отсутствует, вы получите следующую ошибку:

Система не может найти указанный путь.

Для установки переменных среды иногда необходимо указать путь, не содержащий пробелов, например, %JAVA_HOME%определение как "C:\Program Files\Java..." может привести к остановке скриптов при обнаружении пробела в имени пути. Чтобы получить восьмисимвольное имя, которое Windows назначает любому каталогу для подстановки в переменных среды, используйте команду листинга каталогов с параметром /x на один уровень выше целевого каталога. Например, следующий код отобразит имена файлов 8.3 для всех каталогов непосредственно под корнем:

C:\> каталог /x

(Пользователи могут отключить создание имени файла 8.3 для каждого диска.)

Смотрите также

Ссылки

  1. ^ Дейли, Р. К.; Нойман, П. Г. (1965). «Универсальная файловая система для вторичного хранения». Труды 30 ноября — 1 декабря 1965 г., осенняя объединенная компьютерная конференция, часть I, XX — AFIPS '65 (осень, часть I) . Том. Часть I. стр. 213–229. doi : 10.1145/1463891.1463915 . S2CID  16236414.
  2. ^ «Почему Windows использует обратные косые черты, а все остальное использует прямые косые черты». 10 февраля 2014 г.
  3. ^ «Почему символ пути DOS «»?». 24 июня 2005 г.
  4. ^ abc "Именование файлов, путей и пространств имен". Microsoft Docs . 15 декабря 2022 г.
  5. ^ "cd". Команды Windows: Windows Server. Microsoft Docs . 3 февраля 2023 г. Получено 4 октября 2023 г.
  6. ^ "Введение в оболочку". GitHub . OpenAtom OpenHarmony . Получено 13 марта 2024 г. .
  7. ^ "exec". GitHub . OpenAtom OpenHarmony . Получено 14 марта 2024 г. .
  8. ^ "Когда обратная косая черта не является обратной косой чертой?". Разбираемся во всем этом .
  9. ^ "DavGetHTTPFromUNCPath function". WebDAV: Windows. Microsoft Docs . series. 13 октября 2021 г. Получено 4 октября 2023 г.
  10. ^ "Форматы путей к файлам в системах Windows". Файловый и потоковый ввод-вывод: .NET. Microsoft Docs . Получено 14 июля 2019 г.
  11. ^ "winapi - Есть ли разница между путями \??\ и \\?\?". Stack Overflow .
  12. ^ "Префиксы пути \??\ и \\?\". Stack Overflow .
  13. ^ "Определение UNC". ComputerLanguage.com .
  14. ^ «Спецификация разрешения имени пути POSIX».
  15. ^ "Определение имени пути POSIX".

Внешние ссылки