Что такое файловый каталог на диске

Обновлено: 21.11.2024

Для открытия файла необходимо, чтобы вы, как программист, и Python договорились о расположении файла на вашем диске. Файлы располагаются на диске по пути. Имя файла можно представить как короткое имя файла, а путь — как полное имя. Например, на Mac, если вы сохраните файл hello.txt в своем домашнем каталоге, путь к этому файлу будет /Users/yourname/hello.txt. На компьютере с Windows путь выглядит немного иначе, но используются те же принципы. Например, в Windows путь может быть C:\Users\yourname\My Documents\hello.txt

История разделителей путей

Почему разделителем пути является / в системах Unix/Linux/MacOS и \ в системах Microsoft Windows? Концепция иерархии папок впервые была разработана в Unix. В командной строке Unix символ / используется для разделения имен папок в пути к файлу, а тире используются для указания параметров командной строки, например, path/to/file/myfile -long -reverse . В системе Windows символ / используется для параметров командной строки, поэтому разработчики Windows решили использовать \ для разделения имен папок в пути к файлу, например, path\to\file\myfile /long/reverse . Использование символа \ для разделения имен папок в пути проблематично, поскольку символ \ также используется в качестве escape-символа для специальных символов, таких как \n для символа новой строки. В итоге мы всегда будем использовать символ / для разделения имен папок в пути, и даже в системе Windows путь к файлу будет работать нормально.

Вы можете получить доступ к файлам в подпапках, также называемых каталогами, в вашем домашнем каталоге, добавив косую черту и имя папки. Например, если у вас есть файл с именем hello.py в папке с именем CS150, которая находится внутри папки с именем PyCharmProjects в вашем домашнем каталоге, то полное имя файла hello.py будет /Users/yourname/PyCharmProjects/CS150/hello. .py . Это называется абсолютный путь к файлу. Абсолютный путь к файлу обычно работает только на определенном компьютере. Подумайте об этом на секунду. Какой еще компьютер в мире будет иметь абсолютный путь к файлу, начинающийся с /Users/yourname ?

Если файл находится не в той же папке, что и ваша программа Python, вам нужно указать компьютеру, как к нему добраться. Относительный путь к файлу начинается с папки, содержащей вашу программу на Python, и следует иерархии файлов на компьютере. Файловая иерархия содержит папки, содержащие файлы и другие подпапки. Указать вложенную папку очень просто — вы просто указываете имя вложенной папки. Чтобы указать родительскую папку, вы используете специальную нотацию .., потому что у каждого файла и папки есть один уникальный родительский элемент. Вы можете использовать нотацию .. несколько раз в пути к файлу для перемещения на несколько уровней вверх по иерархии файлов. Вот пример файловой иерархии, которая содержит несколько папок, файлов и подпапок. Папки на диаграмме выделены жирным шрифтом.

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

Запомните важное правило: если ваш файл и ваша программа Python находятся в одном каталоге, вы можете просто использовать такое имя файла: open('myfile.txt', 'r') . Если ваш файл и ваша программа Python находятся в разных каталогах, вы должны указать один или несколько каталогов либо в относительном пути файла к файлу, например: open('../myData/data3. txt', 'r') или абсолютный путь к файлу, например open('/users/bmiller/myFiles/allProjects/myData/data3.txt', 'r') .

© Авторские права Брэд Миллер, Дэвид Ранум, 2014. Создано с помощью Runestone Interactive. Последнее обновление: 19 марта 2022 г.
Создано с использованием Runestone 6.0.11.

Определение и примеры корневых папок и корневых каталогов

Тим Фишер имеет более чем 30-летний опыт работы в сфере технологий. Он пишет о технологиях более двух десятилетий и является вице-президентом и генеральным директором Lifewire.

Майкл Хайне — сертифицированный CompTIA писатель, редактор и сетевой инженер с более чем 25-летним опытом работы в сфере телевидения, обороны, интернет-провайдеров, телекоммуникаций и образования.

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

Корневой каталог содержит все остальные папки на диске или в папке и, конечно же, может содержать файлы. Вы можете визуализировать это с помощью перевернутого дерева, где корни (корневая папка) находятся вверху, а ветви (подпапки) находятся ниже; корень — это то, что скрепляет все его нижние элементы.

Например, корневой каталог основного раздела на вашем компьютере, вероятно, C:\. Корневая папка вашего DVD или CD-привода может быть D:\. В корне реестра Windows хранятся такие кусты, как HKEY_CLASSES_ROOT.

ROOT также является аббревиатурой от ROOT Object Oriented Technologies, но не имеет ничего общего с корневыми папками.

Примеры корневых папок

Термин корень также может относиться к тому местоположению, о котором вы говорите. Например, программа, которая устанавливается в папку C:\Programs\Example, использует эту конкретную папку в качестве корневой папки с потенциальной серией вложенных папок под ней.

То же самое относится и к любой другой папке. Вам нужно перейти в корень папки пользователя для User1 в Windows? Это папка C:\Users\Name1\. Это, конечно, зависит от того, о каком пользователе вы говорите — корневая папка User2 будет C:\Users\User2\.

Доступ к корневой папке

Быстрый способ попасть в корневую папку жесткого диска, когда вы находитесь в командной строке Windows, — это выполнить команду изменения каталога — cd — следующим образом:

После выполнения вы будете немедленно перемещены из текущего рабочего каталога в корневую папку. Так, например, если вы находитесь в папке C:\Windows\System32, а затем вводите команду cd с обратной косой чертой (как показано выше), вы сразу же будете перемещены из того места, где вы находились. на C:\.

Аналогично выполнение команды cd следующим образом:

<р>. переместит каталог на одну позицию вверх, что полезно, если вам нужно добраться до корня папки, а не до корня всего диска. Например, выполнение команды cd .. в папке C:\Users\User1\Downloads\ изменяет текущий каталог на C:\Users\User1\. Повторное выполнение приведет к C:\Users\ и т. д.

Ниже приведен пример, в котором мы начинаем с папки Германия на диске C:\. Как видите, выполнение той же команды в командной строке перемещает рабочий каталог в папку непосредственно перед/над ним, вплоть до корня жесткого диска.

Вы можете попытаться получить доступ к корневой папке только для того, чтобы обнаружить, что не видите ее при просмотре через Проводник. Это связано с тем, что некоторые папки по умолчанию скрыты в Windows. См. нашу статью Как показать скрытые файлы и папки в Windows? если вам нужна помощь, чтобы отобразить их.

Подробнее о корневых папках и каталогах

Термин корневая веб-папка иногда может использоваться для описания каталога, содержащего все файлы, составляющие веб-сайт. Здесь применяется та же концепция, что и на вашем локальном компьютере: файлы и папки в этой корневой папке содержат основные файлы веб-страницы, такие как файлы HTML, которые должны отображаться, когда кто-то обращается к основному URL-адресу веб-сайта.

Термин root, используемый здесь, не следует путать с папкой /root в некоторых операционных системах Unix, где она используется вместо домашнего каталога определенного пользователя. учетная запись (иногда называемая корневой учетной записью). Однако в некотором смысле, поскольку это основная папка для конкретного пользователя, вы можете называть ее корневой папкой.

В некоторых операционных системах файлы могут храниться в корневом каталоге, например на диске C:/ в Windows, но некоторые ОС не поддерживают это.

Термин корневой каталог используется в операционной системе VMS для определения места хранения всех файлов пользователя.

Корневая папка — это папка самого нижнего уровня на SD-карте. Это первая папка, которую вы видите, когда открываете SD-карту. Вы можете увидеть папки с именами DCIM и MISC или вообще ничего не увидеть, если недавно отформатировали карту памяти.

Каталог /root в Linux — это пользовательская папка системного администратора или пользователя root. Как и в папке Windows C:\Users, в ней есть подкаталоги для каждого пользователя, содержащие все данные учетной записи.

Папка /html — это корневой каталог для ваших файлов WordPress. Вы можете получить доступ к корневой папке через SFTP, SSH или файловый менеджер.

Каталог – это контейнер, который используется для хранения папок и файлов. Он организует файлы и папки в иерархическом порядке.

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

Преимущества:

  • Поскольку это один каталог, его реализация очень проста.
  • Если файлы меньше по размеру, поиск ускорится.
  • Операции, такие как создание файлов, поиск, удаление, обновление, очень просты в такой структуре каталогов.

  • Возможен конфликт имен, так как два файла могут иметь одинаковые имена.
  • Поиск займет много времени, если каталог большой.
  • Это не может группировать файлы одного типа вместе.
  • Двухуровневый каталог.
    Как мы видели, одноуровневый каталог часто приводит к путанице в именах файлов у разных пользователей. решение этой проблемы заключается в создании отдельного каталога для каждого пользователя.

  • Можно указать полный путь, например /имя_пользователя/имя_каталога/.
  • У разных пользователей может быть один и тот же каталог и имя файла.
  • Поиск файлов упрощается благодаря пути и группировке пользователей.
  • Пользователь не может делиться файлами с другими пользователями.
  • Тем не менее, это не очень масштабируемо, два файла одного типа не могут быть сгруппированы вместе в одном пользователе.
  • Каталог с древовидной структурой.
    После того, как мы увидели двухуровневый каталог в виде дерева высоты 2, естественным обобщением будет расширение структуры каталогов до дерева произвольной высоты.
    Это обобщение позволяет пользователю создавать свои собственные подкаталоги и соответствующим образом организовывать свои файлы.

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

  • Очень общий, поскольку можно указать полный путь.
  • Высокая масштабируемость, вероятность конфликта имен меньше.
  • Поиск становится очень простым, мы можем использовать как абсолютные, так и относительные пути.

  • Каждый файл не вписывается в иерархическую модель, файлы могут быть сохранены в нескольких каталогах.
  • Мы не можем обмениваться файлами.
  • Это неэффективно, поскольку доступ к файлу может происходить из нескольких каталогов.
  • Каталог ациклического графа.
    Ациклический граф — это граф без цикла, который позволяет нам совместно использовать подкаталоги и файлы. Один и тот же файл или подкаталоги могут находиться в двух разных каталогах. Это естественное обобщение каталога с древовидной структурой.

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

Члены многих типов в пространстве имен System.IO включают параметр пути, который позволяет указать абсолютный или относительный путь к ресурсу файловой системы. Затем этот путь передается API-интерфейсам файловой системы Windows. В этом разделе обсуждаются форматы путей к файлам, которые можно использовать в системах Windows.

Традиционные пути DOS

Стандартный путь DOS может состоять из трех компонентов:

  • Буква тома или диска, за которой следует разделитель томов ( : ).
  • Имя каталога. Символ разделителя каталогов разделяет подкаталоги во вложенной иерархии каталогов.
  • Необязательное имя файла. Символ разделителя каталогов разделяет путь к файлу и имя файла.

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

< td>Абсолютный путь от корня текущего диска.
Путь Описание
C:\Documents\Newsletters\Summer2018 .pdf Абсолютный путь к файлу от корня диска C: .
\Program Files\Custom Utilities\StringFinder.exe
2018\January.xlsx Относительный путь к файлу в подкаталоге текущий каталог.
..\Publications\TravelBrochure.pdf Относительный путь к файлу в каталоге, начиная с текущего каталога.
C:\Projects\apilibrary\apilibrary.sln Абсолютный путь к файлу из корня диска C: .
C:Projects\apilibrary\apilibrary.sln Относительный путь от текущего каталога диска C:.

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

Вы можете определить, является ли путь к файлу полным (т. е. не зависит ли путь от текущего каталога и не изменяется при изменении текущего каталога), вызвав метод Path.IsPathFullyQualified. Обратите внимание, что такой путь может включать сегменты относительных каталогов ( . и .. ) и по-прежнему быть полным, если разрешенный путь всегда указывает на одно и то же место.

В следующем примере показана разница между абсолютным и относительным путями. Предполагается, что каталог D:\FY2018\ существует и что вы не задали текущий каталог для D:\ из командной строки перед запуском примера.

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

UNC-пути

Пути универсального соглашения об именах (UNC), которые используются для доступа к сетевым ресурсам, имеют следующий формат:

  • Имя сервера или хоста, перед которым стоит \\ . Имя сервера может быть именем компьютера NetBIOS или IP/FQDN-адресом (поддерживаются как IPv4, так и v6).
  • Имя общего ресурса, которое отделяется от имени хоста символом \ . Вместе имя сервера и общего ресурса составляют том.
  • Имя каталога. Символ разделителя каталогов разделяет подкаталоги во вложенной иерархии каталогов.
  • Необязательное имя файла. Символ разделителя каталогов разделяет путь к файлу и имя файла.

Ниже приведены некоторые примеры путей UNC:

Путь Описание
\\system07\C$\< /td> Корневой каталог диска C: в system07 .
\\Server2\Share\Test\Foo.txt Foo.txt в тестовом каталоге тома \\Server2\Share.

Пути 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.

Определить путь

Первым шагом в нормализации пути является определение типа пути. Пути относятся к одной из нескольких категорий:

  • Это пути к устройствам; то есть они начинаются с двух разделителей и вопросительного знака или точки ( \\? или \\. ).
  • Это пути UNC; то есть они начинаются с двух разделителей без знака вопроса или точки.
  • Это полностью определенные пути DOS; то есть они начинаются с буквы диска, разделителя тома и разделителя компонентов ( C:\ ).
  • Они обозначают устаревшее устройство ( CON , LPT1 ).
  • Они относятся к корню текущего диска; то есть они начинаются с одного разделителя компонентов ( \ ).
  • Они относятся к текущему каталогу указанного диска; то есть они начинаются с буквы диска, разделителя томов и без разделителя компонентов ( C: ).
  • Они относятся к текущему каталогу; то есть они начинаются с чего-то еще ( temp\testfile.txt ).

Тип пути определяет, применяется ли каким-либо образом текущий каталог. Он также определяет, что является «корнем» пути.

Обработка устаревших устройств

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

Читайте также: