Какой путь к файлу
Обновлено: 21.11.2024
Файловая система хранит и упорядочивает файлы на каком-либо носителе, как правило, на одном или нескольких жестких дисках, таким образом, чтобы их можно было легко извлечь. Большинство используемых сегодня файловых систем хранят файлы в древовидной (или иерархической) структуре. На вершине дерева находится один (или несколько) корневых узлов. В корневом узле находятся файлы и каталоги (папки в Microsoft Windows). Каждый каталог может содержать файлы и подкаталоги, которые, в свою очередь, могут содержать файлы и подкаталоги и т. д., потенциально до почти безграничной глубины.
В этом разделе рассматриваются следующие вопросы:
Что такое путь?
На следующем рисунке показано примерное дерево каталогов, содержащее один корневой узел. Microsoft Windows поддерживает несколько корневых узлов. Каждый корневой узел сопоставляется с томом, например C:\ или D:\ . ОС Solaris поддерживает один корневой узел, который обозначается косой чертой / .
Пример структуры каталога
Файл идентифицируется по его пути в файловой системе, начиная с корневого узла. Например, файл statusReport на предыдущем рисунке описывается следующей нотацией в ОС Solaris:
В Microsoft Windows отчет о состоянии описывается следующими обозначениями:
Символ, используемый для разделения имен каталогов (также называемый разделителем), зависит от файловой системы: ОС Solaris использует прямую косую черту ( / ), а Microsoft Windows использует обратную косую черту ( \).
Относительно или абсолютно?
Путь может быть относительным или абсолютным. Абсолютный путь всегда содержит корневой элемент и полный список каталогов, необходимых для поиска файла. Например, /home/sally/statusReport — это абсолютный путь. Вся информация, необходимая для поиска файла, содержится в строке пути.
Для доступа к файлу относительный путь необходимо объединить с другим путем. Например, joe/foo — это относительный путь. Без дополнительной информации программа не сможет надежно найти каталог joe/foo в файловой системе.
Символические ссылки
Объекты файловой системы чаще всего представляют собой каталоги или файлы. С этими предметами знаком каждый. Но некоторые файловые системы также поддерживают символические ссылки. Символическая ссылка также называется символической ссылкой или мягкой ссылкой.
символическая ссылка — это специальный файл, который служит ссылкой на другой файл. По большей части символические ссылки прозрачны для приложений, и операции с символическими ссылками автоматически перенаправляются к цели ссылки. (Файл или каталог, на который указывает ссылка, называется целью ссылки.) Исключения составляют случаи, когда символическая ссылка удаляется или переименовывается, и в этом случае удаляется или переименовывается сама ссылка, а не цель. ссылки.
На следующем рисунке logFile кажется пользователю обычным файлом, но на самом деле это символическая ссылка на каталог dir/logs/HomeLogFile . HomeLogFile является целью ссылки.
Пример символической ссылки.
Символическая ссылка обычно прозрачна для пользователя. Чтение или запись символической ссылки аналогичны чтению или записи любого другого файла или каталога.
Фраза разрешение ссылки означает замену символической ссылки фактическим местоположением в файловой системе. В этом примере разрешение logFile дает dir/logs/HomeLogFile .
В реальных сценариях большинство файловых систем широко используют символические ссылки. Иногда небрежно созданная символическая ссылка может привести к циклической ссылке. Циклическая ссылка возникает, когда цель ссылки указывает на исходную ссылку. Циклическая ссылка может быть косвенной: каталог a указывает на каталог b, который указывает на каталог c, содержащий подкаталог, указывающий обратно на каталог a. Циклические ссылки могут вызвать хаос, когда программа рекурсивно перемещается по структуре каталогов. Однако этот сценарий был учтен и не приведет к бесконечному циклу вашей программы.
На следующей странице обсуждается сердцевина файлового ввода-вывода в языке программирования Java — класс Path.
Путь к файлу описывает расположение файла в структуре папок веб-сайта.
Примеры пути к файлу
Путь | Описание | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Пути к файлам HTMLПуть к файлу описывает расположение файла в структуре папок веб-сайта. Пути к файлам используются при создании ссылок на внешние файлы, например:
Абсолютные пути к файламАбсолютный путь к файлу — это полный URL-адрес файла: Пример
Тег описан в главе "Изображения HTML". Относительные пути к файламОтносительный путь к файлу указывает на файл относительно текущей страницы. В следующем примере путь к файлу указывает на файл в папке с изображениями, расположенной в корневом каталоге текущего веб-сайта: Пример
В следующем примере путь к файлу указывает на файл в папке с изображениями, расположенной в текущей папке: Пример
В следующем примере путь к файлу указывает на файл в папке с изображениями, расположенной в папке на один уровень выше текущей папки: Пример
РекомендацииРекомендуется использовать относительные пути к файлам (если это возможно). При использовании относительных путей к файлам ваши веб-страницы не будут привязаны к вашему текущему базовому URL. Все ссылки будут работать на вашем собственном компьютере (localhost), а также на вашем текущем общедоступном домене и ваших будущих общедоступных доменах. Члены многих типов в пространстве имен System.IO включают параметр пути, который позволяет указать абсолютный или относительный путь к ресурсу файловой системы. Затем этот путь передается API-интерфейсам файловой системы Windows. В этом разделе обсуждаются форматы путей к файлам, которые можно использовать в системах Windows. Традиционные пути DOSСтандартный путь DOS может состоять из трех компонентов:
Если присутствуют все три компонента, путь является абсолютным. Если буква тома или диска не указана, а имя каталога начинается с символа разделителя каталогов, путь является относительным от корня текущего диска. В противном случае путь указывается относительно текущего каталога. В следующей таблице показаны некоторые возможные пути к каталогам и файлам.
Обратите внимание на разницу между двумя последними путями. Оба указывают необязательный спецификатор тома ( C: в обоих случаях), но первый начинается с корня указанного тома, а второй — нет. В результате первый — это абсолютный путь от корневого каталога диска C:, а второй — относительный путь от текущего каталога диска C:. Использование второй формы вместо первой является частым источником ошибок, связанных с путями к файлам Windows. Вы можете определить, является ли путь к файлу полным (т. е. не зависит ли путь от текущего каталога и не изменяется при изменении текущего каталога), вызвав метод Path.IsPathFullyQualified. Обратите внимание, что такой путь может включать сегменты относительных каталогов ( . и .. ) и по-прежнему быть полным, если разрешенный путь всегда указывает на одно и то же место. В следующем примере показана разница между абсолютным и относительным путями. Предполагается, что каталог D:\FY2018\ существует и что вы не задали текущий каталог для D:\ из командной строки перед запуском примера. Если вы хотите, чтобы комментарии к коду были переведены на языки, отличные от английского, сообщите нам об этом в этом обсуждении на GitHub. UNC-путиПути универсального соглашения об именах (UNC), которые используются для доступа к сетевым ресурсам, имеют следующий формат:
Ниже приведены некоторые примеры путей UNC:
Пути UNC всегда должны быть полностью определенными. Они могут включать сегменты относительных каталогов ( . и .. ), но они должны быть частью полного пути. Относительные пути можно использовать только путем сопоставления пути UNC с буквой диска. Пути устройств DOSОперационная система Windows имеет единую объектную модель, которая указывает на все ресурсы, включая файлы. Эти пути к объектам доступны из окна консоли и отображаются на уровне Win32 через специальную папку символических ссылок, с которыми сопоставляются устаревшие пути DOS и UNC. Доступ к этой специальной папке осуществляется с помощью синтаксиса пути устройства DOS, который может быть одним из следующих: Помимо идентификации диска по его букве, вы можете идентифицировать том по его GUID. Это принимает форму: Путь устройства DOS состоит из следующих компонентов: Спецификатор пути к устройству ( \\.\ или \\?\ ), который идентифицирует путь как путь к устройству DOS. Символическая ссылка на «реальный» объект устройства (C: в случае имени диска или Volume в случае GUID тома). Первый сегмент пути устройства DOS после спецификатора пути устройства идентифицирует том или диск. (Например, \\?\C:\ и \\.\BootPartition\ .) Существует специальная ссылка для UNC, которая, что неудивительно, называется UNC . Например: Для UNC устройств часть сервера/общего ресурса образует том. Например, в \\?\server1\e:\utilities\\filecomparer\ часть server/share — это server1\utilities . Это важно при вызове такого метода, как Path.GetFullPath(String, String) с относительными сегментами каталога; невозможно пройти мимо тома. Пути устройств DOS являются полными по определению и не могут начинаться с сегмента относительного каталога ( . или .. ). Текущие каталоги никогда не входят в их использование. Пример: способы ссылки на один и тот же файлВ следующем примере показаны некоторые способы обращения к файлу при использовании API в пространстве имен System.IO. В примере создается экземпляр объекта FileInfo и используются его свойства Name и Length для отображения имени файла и длины файла. Нормализация путиПочти все пути, передаваемые API Windows, нормализованы. Во время нормализации Windows выполняет следующие шаги:
Эта нормализация происходит неявно, но вы можете сделать это явно, вызвав метод Path.GetFullPath, который заключает в себе вызов функции GetFullPathName(). Вы также можете вызвать функцию Windows GetFullPathName() напрямую, используя P/Invoke. Определить путьПервым шагом в нормализации пути является определение типа пути. Пути относятся к одной из нескольких категорий:
Тип пути определяет, применяется ли каким-либо образом текущий каталог. Он также определяет, что является «корнем» пути. Обработка устаревших устройствЕсли путь представляет собой устаревшее устройство DOS, такое как CON , COM1 или LPT1 , он преобразуется в путь устройства путем добавления \\.\ и возврата. Путь, начинающийся с имени устаревшего устройства, всегда интерпретируется методом Path.GetFullPath(String) как устаревшее устройство. Например, путь устройства DOS для CON.TXT — \\.\CON , а путь устройства DOS для COM1.TXT\file1.txt — \\.\COM1 . Применить текущий каталогЕсли путь не указан полностью, Windows применяет к нему текущий каталог. К UNC и путям устройств не применяется текущий каталог. Не работает и полный диск с разделителем C:\ . Если путь начинается с одного разделителя компонентов, применяется диск из текущего каталога. Например, если путь к файлу — \utilities, а текущий каталог — C:\temp\ , нормализация дает C:\utilities . Если путь начинается с буквы диска, разделителя томов и без разделителя компонентов, применяется последний текущий каталог, заданный в командной оболочке для указанного диска. Если последний текущий каталог не был установлен, применяется только диск. Например, если путь к файлу — D:sources, текущий каталог — C:\Documents\, а последний текущий каталог на диске D: — D:\sources\, результатом будет D:\sources\sources. Эти «относительные» пути являются распространенным источником логических ошибок программ и сценариев. Предполагать, что путь, начинающийся с буквы и двоеточия, не является относительным, явно неверно. Если путь начинается не с разделителя, применяются текущий диск и текущий каталог. Например, если путь — filecompare, а текущий каталог — C:\utilities\ , результатом будет C:\utilities\filecompare\ . Канонизировать разделителиВсе прямые косые черты ( / ) преобразуются в стандартный разделитель Windows — обратную косую черту ( \ ). Если они присутствуют, ряд косых черт, следующих за первыми двумя косыми чертами, сворачивается в одну косую черту. Оценить относительные компонентыПо мере обработки пути оцениваются любые компоненты или сегменты, состоящие из одной или двух точек ( . или .. ): На один период текущий сегмент удаляется, так как он ссылается на текущий каталог. Для двойной точки текущий сегмент и родительский сегмент удаляются, поскольку двойная точка относится к родительскому каталогу. Родительские каталоги удаляются только в том случае, если они не находятся за корнем пути. Корень пути зависит от типа пути. Это диск ( C:\ ) для путей DOS, сервер/общий ресурс для UNC ( \\Server\Share ) и префикс пути к устройству для путей к устройствам ( \\?\ или \\.\ ). Обрезать символыПомимо удаленных ранее серий разделителей и относительных сегментов, при нормализации удаляются некоторые дополнительные символы: Если сегмент заканчивается одним периодом, этот период удаляется. (Сегмент из одной или двух точек нормализуется на предыдущем шаге. Сегмент из трех и более точек не нормализуется и фактически является допустимым именем файла/каталога.) Если путь не заканчивается разделителем, все завершающие точки и пробелы (U+0020) удаляются. Если последний сегмент представляет собой просто одинарную или двойную точку, он подпадает под действие приведенного выше правила относительных компонентов. Это правило означает, что вы можете создать имя каталога с завершающим пробелом, добавив завершающий разделитель после пробела. Вы никогда не должны создавать каталог или имя файла с пробелом в конце. Конечные пробелы могут затруднить или сделать невозможным доступ к каталогу, и приложения обычно не работают при попытке обработать каталоги или файлы, имена которых содержат конечные пробелы. Пропустить нормализациюОбычно любой путь, переданный API Windows, (фактически) передается функции GetFullPathName и нормализуется. Есть одно важное исключение: путь к устройству начинается со знака вопроса, а не с точки. Если путь не начинается точно с \\?\ (обратите внимание на использование канонической обратной косой черты), он нормализуется. Почему вы хотите пропустить нормализацию? Есть три основные причины: Чтобы получить доступ к путям, которые обычно недоступны, но разрешены. Файл или каталог, называемый скрытым. , например, невозможно получить доступ каким-либо другим способом. Чтобы повысить производительность, пропустив нормализацию, если она уже была выполнена. Пропуск проверки нормализации и максимального пути — единственное различие между двумя синтаксисами пути к устройству; в остальном они идентичны. Будьте осторожны, пропуская нормализацию, так как вы можете легко создать пути, с которыми "обычным" приложениям будет сложно работать. Пути, начинающиеся с \\?\, по-прежнему нормализуются, если вы явно передаете их функции GetFullPathName. Вы можете передавать пути, содержащие более MAX_PATH символов, в GetFullPathName без \\?\ . Он поддерживает пути произвольной длины вплоть до максимального размера строки, который может обрабатывать Windows. Case и файловая система WindowsОсобенность файловой системы Windows, которая сбивает с толку пользователей и разработчиков, отличных от Windows, заключается в том, что в именах путей и каталогов не учитывается регистр. То есть имена каталогов и файлов отражают регистр строк, используемых при их создании. Например, вызов метода Путь может относиться к любому из следующего: <р>1. Также известный как имя пути, текущий путь или путь — это полное местоположение или имя, где находится компьютер, файл, устройство или веб-страница. Ниже приведены примеры различных типов путей, связанных с компьютером.Путь MS-DOSВ следующем примере показан путь MS-DOS или путь к файлу system.ini. При работе с путем из командной строки MS-DOS, Windows или Windows все диски (корень), каталоги и файлы разделяются обратной косой чертой. Путь Linux и AppleВ Linux или оболочке Apple с помощью команды pwd ваш путь может выглядеть так, как показано в следующем примере. При работе с этим типом пути диски, каталоги и файлы разделяются косой чертой. Сетевой путьСетевой путь — это путь к общему ресурсу. В приведенном ниже примере «помощь» — это общий ресурс на «надежном» компьютере. Интернет-путьВ следующем примере показан Интернет-путь или URL-адрес (унифицированный указатель ресурсов) этой веб-страницы в Интернете. Как отобразить текущий путь?По умолчанию MS-DOS и командная строка Windows отображают в приглашении полный текущий путь. Например, если приглашение — C:\Windows\System32>, то путь — c:\Windows\System32. В Linux у вас может быть только частичный путь. Например, в приглашении может быть "~/public_html/cgi-bin". ~ (тильда) — это сокращение, используемое для обозначения вашего домашнего каталога. Чтобы отобразить текущий путь в MS-DOS или командной строке Windows, введите в командной строке chdir. В Linux введите pwd в приглашении, чтобы распечатать рабочий каталог (путь).
Дополнительная информация<р>2. Path — это социальная сеть, основанная в 2010 году и предназначенная исключительно для мобильных устройств. Он позволяет вам подключать самых близких друзей и членов семьи, до 150 подключений. <р>3. В векторной графике путь — это другое название вектора или линии с начальной и конечной точками. <р>4. В компьютерных играх и других трехмерных средах путь — это линия, по которой объекты перемещаются из одной точки в другую. Например, в компьютерной игре NPC (неигровой персонаж) может следовать заданному пути, чтобы создать иллюзию живого персонажа. Чтобы помочь этому персонажу обходить препятствия, которые могут помешать его пути, может использоваться алгоритм, подобный алгоритму A*.Читайте также:
|