Что такое файловый каталог на диске
Обновлено: 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 может состоять из трех компонентов:
- Буква тома или диска, за которой следует разделитель томов ( : ).
- Имя каталога. Символ разделителя каталогов разделяет подкаталоги во вложенной иерархии каталогов.
- Необязательное имя файла. Символ разделителя каталогов разделяет путь к файлу и имя файла.
Если присутствуют все три компонента, путь является абсолютным. Если буква тома или диска не указана, а имя каталога начинается с символа разделителя каталогов, путь является относительным от корня текущего диска. В противном случае путь указывается относительно текущего каталога. В следующей таблице показаны некоторые возможные пути к каталогам и файлам.
Путь | Описание |
---|---|
C:\Documents\Newsletters\Summer2018 .pdf | Абсолютный путь к файлу от корня диска C: . |
\Program Files\Custom Utilities\StringFinder.exe | < td>Абсолютный путь от корня текущего диска.|
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, заключается в том, что в именах путей и каталогов не учитывается регистр. То есть имена каталогов и файлов отражают регистр строк, используемых при их создании. Например, вызов метода
Читайте также: