Как задать путь к файлу
Перейти к содержимому

Как задать путь к файлу

  • автор:

Как задать путь к файлу

Абсолютные и относительные ссылки. Как указать путь к файлу правильно Абсолютные ссылки всегда начинаются с имени протокола. Например http:// и содержат имя файла.

Относительные — ведут отсчет от корня сайта или текущего документа.

При обращении к каталогу без явного указания названия файла (то, что пишется в конце, после /fail.html) обычно открывается индексный файл — index.html. Это стоит помнить, чтобы всегда вы могли защитить свой сайт от мошенников. Об этом я рассказываю в настройках WP.

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

Вариант 1 Фалы располагаются в одной папке?

Здесь все просто. Нужно сделать ссылку из исходного на ссылаемый. То есть вот так:

<a htrf separator» style=»clear: both; text-align: center;»>
<a htrf separator» style=»clear: both; text-align: center;»>

Здесь путь такой

<a htrf kodeht»> <a htrf separator» style=»clear: both; text-align: center;»>

Здесь нужно выйти — ../ из одной и второй ../ папки и там уже найти файл

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

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

Зато на компьютере вообще все проще простого.

Сейчас я вам расскажу пару фишек о том, как легко и точно прописать путь к файлу.

  1. Выбираете нужный вам файл
  2. Зажмите кнопку Shift и щелкаете правой кнопкой мыши.
  3. В открывшемся меню выбираете копировать путь к файлу.
  4. Вставляете сразу после = без кавычек. Они подставятся автоматически.

Если вы пользуетесь командной строкой на компьютере. Лично у меня она даже закреплена в панели задач. То..

  1. Открываете командную строку
  2. Просто перетаскиваете туда нужный файл
  3. Получаете точный путь к вашему файлу. Копируйте и наслаждайтесь!

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

Лекция 14. Файловая система. Командные интерпретаторы

Файловая система — способ хранения информации в долговременной памяти компьютера (жёсткие диски, флешки, …) и соотвеющее API операционной системы.

API — application programming interface — интерфейс прикладного программирования. Так называют набор функций, посредством которых программист может взаимодействовать с операционной системой.

Файл — поименованная область диска. Каталог, папка — поименованная группа файлов. Родительский каталог для файла или папки — это папка, в которой находится данный файл или папка. Корневой каталог — каталог, у которого нет родительского каталога.

Путь к файлу — способ указания конкретного файла в файловой системе.

Далее мы будем рассматривать файловую систему UNIX-подобных операционных систем.

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

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

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

Имя файла в UNIX-подобных операционных системах может содержать любые знаки кроме знака / и знака с кодом \0 . Символ с кодом \0 запрещён, т.к. API для UNIX-подобных систем пишется на Си, а в Си этот символ является ограничителем строк. А знак / служит для разделения имён каталогов в пути к файлу.

По соглашению, имя файла может содержать точку, часть имени файла после точки определяет тип файла. Например, example.c — исходный текст на Си, index.html — веб-страница. Эта часть имени файла называется «расширение» или «суффикс».

Абсолютный путь к файлу записывается, начиная со знака / :

Относительный путь к файлу не начинается со / :

UNIX-подобная ОС — операционная система, реализующая стандарт POSIX. Примеры: Linux, macOS. На Windows имитируют окружение POSIX такие проекты как Cygwin и MinGW/MSys. В Windows 10 появилась подсистема WSL (Windows Subsystem for Linux), которая также имитирует окружение POSIX.

В путях можно использовать такие синонимы, как . и .. . Знак . является синонимом текущей папки, знак .. — родительской папки. Можно считать, что в каждой папке находится папка . , которая является синонимом для неё же самой и папка .. , которая является синонимом для родительской папки (ссылка на родительскую папку).

В корневой папке .. ссылается на неё же саму.

Т.е., например, следующие пути будут эквиваленты:

Путь /var/log/.. ссылается на папку /var , т.к. .. в /var/log ссылаются на родительскую для неё папку. /var/log/../.. ссылается на корень.

Ссылки . и .. , как правило, используются в относительных путях.

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

Командный процессор — текстовая оболочка операционной системы. Пользователь вводит команду, операционная система команду выполняет, выводит что-то на экран и ожидает следующей команды. Примерно как в REPL.

Исторически в UNIX первой оболочкой была оболочка, которая так и называлась, shell и располагалась по пути /bin/sh . Позже Борн создал оболочку Born Shell, затем был создан open source клон этой оболочки Born Again Shell — bash. Bash располагается по пути /bin/bash . Unix shell стандартизирован в POSIX.

Bash является расширением Unix shell, на большинстве дистрибутивов Linux /bin/sh является ссылкой на /bin/bash .

Bash отображает приглашение командной строки, как правило, включающее имя пользователя, имя компьютера, путь к текущей папке и знак привилегий: $ для ограниченного пользователя, # для администратора (суперпользователя).

является сокращением для домашнего каталога пользователя, каталога вида /home/username .

В командной строке можно вводить как встроенные команды Bash, так и имена программ. Если имя программы не включает знак / , то исполнимый файл программы ищется в стандартных путях поиска, как правило, включающих /bin и /usr/bin . Для суперпользователя — также /sbin и /usr/sbin .

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

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

Нулевым аргументом командной строки является само имя запущенной программы, последующие аргументы — те, что указаны пользователем.

Программы vim (текстовый редактор) и gcc (компилятор Си) получали в качестве аргумента имя файла, программа a.out (результат трансляции) — произвольные строки.

Список стандартных команд оболочки (встроенные команды и стандартные утилиты из /bin ):

  • pwd — вывести текущую папку.
  • cd имя-папки — сменить текущую папку.
  • mkdir имя-папки — создать папку.
  • rm файл. , rmdir папка. — удаляет файлы и папки.
  • cp старый-файл новый-файл — копирует файл.
  • cp файл. папка — копирует несколько файлов в папку.
  • mv старый-файл новый-файл , mv файл. папка — аналогично перемещает или переименовывает файлы и папки.
  • man команда — показывает интерактивную справку по данной команде.
  • cat [файл. ] — распечатывает содержимое файлов на экран. Если имена файлов отсутствуют, то дублируется на экран ввод пользователя.
  • ls [папка] — распечатывает содержимое папки на экран. По умолчанию — текущей папки.
  • clear — очищает экран.
  • more [файл] — вывод содержимого файла постранично, утилита POSIX.
  • less [файл] — улучшенный вариант more , в POSIX не входит, но обычно есть.
  • tree [папка] — вывод дерева папок указанной папки.
  • wc [файл. ] — подсчёт символов, слов и строк в указанных файлах.
  • echo строка — вывод строки на экран.

Для аргументов командной строки существует соглашение, что параметры делятся на ключи и имена файлов. Ключи (опции) всегда начинаются на один или два знака — . Если аргумент не начинается с дефиса — он считается именем файла.

Ключи управляют режимом работы программы. Ключи, начинающиеся на — , как правило, однобуквенные, ключи на — записываются целым словом.

создаст папки foo , foo/bar и foo/bar/baz , если их до этого не существовало. Без ключа -p программа выдаст ошибку, т.к. для папки baz родительской папки foo/bar не существует.

У большинства команд (программ) есть ключ -h или —help , который отображает краткую справку. Не для все команд есть справка, выдаваемая через man .

Bash умеет раскрывать шаблоны имён файлов. Если среди аргументов присутствует аргумент со знаками * или ? , то он считается шаблоном и вместо него помещаются файлы, чьи имена соответствуют шаблону.

В шаблоне знак * означает произвольную последовательность знаков, ? — один знак.

Примеры: *.c — все файлы текущей папки с расширением .c , backups/2020-12-*.zip — архивы, датированные декабрём этого года из папки backups . Если в папке присутствуют файлы с расширениями .cpp и .cxx , то шаблон *.c?? выберет их все.

Пример раскрытия шаблона

В текущей папке было только 2 файла, подпадающие под шаблон.

Для того, чтобы записать аргумент, например, с пробелами или какими-то другими знаками, которые интерпретируются в Bash, используются кавычки.

Двойные кавычки «. » допускают некоторую интерпретацию внутри них, например, раскрытие переменных или шаблонов. Одинарные ‘. ‘ — трактуют содержимое буквально.

«Философия Unix гласит:

  • Пишите программы, которые делают что-то одно и делают это хорошо.
  • Пишите программы, которые бы работали вместе.
  • Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс».

Дуг Макилрой, изобретатель каналов Unix и один из основателей традиции Unix

Процесс — это экземпляр работающей программы.

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

Знак & означает, что процесс запущен в фоне. Список фоновых программ, запущенных в текущем сеансе, можно получить при помощи команды jobs , она выведет пронумерованные процессы. Команда fg переводит фоновый процесс на передний план.

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

Команда fg к приостановленному процессу его возобновляет и переводит на передний план. Команда bg — возобновляет и отправляет в фон.

Пример. Запустили архиватор, увидели, что он будет работать долго, решили послать его в фон:

Для прерывания процесса используется комбинация клавиш CTRL-C:

Процессы в unix-подобных системах идентифицируются по PID — целое число.

Для получения списка запущенных процессов используется команда ps , по умолчанию выводит список процессов текущего пользователя. Команда ps aux выводит все процессы в системе с выдачей подробных сведений.

Процессам можно посылать сигналы. Для посылки сигналов используется команда kill . Синтаксис

где -N — номер сигнала. По умолчанию посылается сигнал SIGTERM . Сигнал SIGTERM — просьба процессу завершиться. Аналогичную роль играет SIGINT , он как раз посылается с клавиатуры комбинацией клавиш CTRL-C. Сигнал SIGSTOP посылается как CTRL-Z.

Список доступных сигналов с номерами:

Сигнал SIGKILL — сигнал на безусловное прерывание программы, имеет код 9 . Поэтому, чтобы жёстко убить процесс, нужно набрать

Если в программе произошла ошибка доступа к памяти (например, из-за неверного указателя), операционная система посылает процессу сигнал SIGSEGV (segmentation violation, segmentation fault, ошибка сегментации).

Процесс может иметь несколько открытых дескрипторов (небольшие целые числа), из которых он может читать данные, либо в них писать. Обычно это дескрипторы открытых файлов или сетевых соединений.

Но есть 3 по умолчанию открытых дескриптора, которые соответствуют двум устройствам:

  • Дескриптор 0 — чтение с клавиатуры.
  • Дескриптор 1 — вывод на экран.
  • Дескриптор 2 — вывод на экран.

Для того, чтобы ввести «конец файла» с клавиатуры, используется комбинация клавиш CTRL-D. На Windows «конец файла» вводится как CTRL-Z.

В языке Си тип FILE* — обёртка над дескрипторами ОС, обёртки над этими тремя дескрипторами доступны как константы stdin , stdout и stderr .

Оболочка bash может перенаправлять дескрипторы. Для запущенной программы можно связать stdin , stdout и stderr с файлом или каналом.

Канал ( pipe ) — особый тип файла. Если один процесс откроет канал для чтения, а второй — для записи, то всё, что запишет второй, будет читать первый. Когда пишущий процесс канал закроет, читающий увидит «конец файла».

Перенаправление стандартного ввода

Если исходно программа запрашивала у пользователя ввод с клавиатуры, то теперь она читает файл input.txt .

Перенаправление стандартного вывода:

На экран ничего не выводится, а то, что программа печатает на экран, на самом деле пишется в файл output.txt . Если до запуска программы файл output.txt существовал, то он перезапишется. Если использовать знак >> , то запись будет осуществляться в конец файла.

Перенаправление стандартного потока ошибок:

Программа может выводить на stdout полезные данные, а на stderr ошибки. Тогда, если stdout перенаправлен и возникнет что-то, о чём нужно уведомить пользователя, (а) сообщение об ошибке пользователь увидит ( stderr по-прежнему связан с экраном), (б) сообщения об ошибках не перепутаются с полезными данными.

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

Несколько программ можно объединять в конвейер:

В этом случае stdout каждой из программ будет связан со стандартным вводом ( stdin ) следующей программы.

Задача: найти в файлах с расширением .c все строки, содержащие #include и вывести их в алфавитном порядке и без повторяющихся строк:

Многие утилиты в unix-подобных ОС или принимают список файлов в качестве аргументов, или, если файлов не указано, читают стандартный ввод.

Написание скриптов

Исполнимые файлы в UNIX-подобных ОС отличаются от обычных флагом исполнимости. У каждого файла есть три набора флагов rwxrwxrwx, r — доступ на чтение, w — доступ на запись, x — доступ на исполнение. Первая группа — права владельца файла, вторая — права группы пользователей, владеющих файлом, третья — права для всех остальных.

Права доступа типичного файла: rw-r–r–, т.е. владелец может в файл писать, все остальные — только читать.

Права доступа: –x–x–x — файл нельзя прочитать, но можно запустить.

Установка и сброс атрибутов выполняется командой chmod :

Исполнимые файлы могут быть либо двоичными в формате исполнимых файлов ОС (ELF для Linux, формат Mach-O для macOS), либо скриптами (сценариями). Скрипты должны начинаться со строки с указанием интерпретатора (так называемый shebang).

Относительный путь к файлу

sergeybr94

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

Если вы уже знакомы с данной темой, то можете закрыть вкладку и не читать

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

  1. https:// — протокол подключения к сайту — домен
  2. source, img — папки
  3. main.png — нужный нам файл

Выглядит вроде просто. Но на практике, никто не указывает абсолютный путь к файлу при верстке страниц. Для этого всегда используют относительный.

Для правильного построения относительного пути, нужно разобраться с его синтаксисом:

  • Знак точка “ . ” — указывает на текущую (корень) папку, где находится файл
  • Две точки “ .. ” — указывает на родителя текущей папки, где находится файл
  • Слэш “ / ” — показывает какую следующую папку/файл будет выбирать

Пока просто запомните эту информацию. Если во время прочтения, забудете, вернитесь к этому списку и вспомните.

Представим что у вас есть вот такая структура проекта. (папки — прямоугольники, файлы — названия с полоской)

Теперь напишем простой относительный путь до картинки first.png . Для этого, в файле index.html нужно прописать вот такую строчку:

Все работает. И можно было бы закончить, но нет ��.

Такой адрес показывает, что поиск файла будет происходить относительно папки, где расположен index.html .

Если бы, вы в начале пути указали / или C:// , это являлось бы абсолютным путем. Слэш в начале “ / ” (для Linux систем) или “ C:// ” (для windows) в начале показывает, что поиск файла будет происходит начиная от корня вашего диска (файловой системы).

Как реально выглядит расположение нашего проекта?

Корень проекта, тоже является папкой, поэтому не забывайте об этом.

Алгоритм работы поиска файла

Прописывая вот такой путь до файла:

Браузер начинает его искать вот таких образом:

  1. Подключение картинки написано в файле index.html. Смотрит где находится файл index.html. Находит эту папку. Это корень проекта
  2. В корне проекта ищет папку source. Если нашел, все ок, идем дальше
  3. В папке source ищет папку img
  4. В папке img находит файл first.png

Вот так происходит поиск файла по относительному пути. Если на какую то папку он не сможет найти, то картинка не будет показана и браузер выдаст ошибку в консоли.

Точка

Давайте теперь рассмотрим вариант посложнее.

В начале прописали ./ . Что же это значит? Я уже писал об этом ранее:

  • Точка указывает на текущую папку, где находиться файл index.html. Т.е. на корень проекта
  • Слэш после точки указывает, что внутри корня проекта будет искать папку, которая находиться после него. Т.е. source

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

Две точки

Но это еще не все. Давайте немного поменяем проект и добавим еще одну папку и страницу:

У нас появились новая папка about, в корне проекта, а в ней страница home.html

И если мы захотим использовать ту же запись для подключения картинки на странице home.html, то она не сработает. Потому, что поиск будет теперь происходить относительно папки about, а не корня проекта, как ранее.

Что же делать? На помощь нам приходят две точки “ .. ”.

Две точки позволяют, так сказать, провалиться на уровень выше. Т.е. поиск будет происходить не от текущей папки home, а от корня проекта.

  1. Подключение картинки написано в файле home.html. Смотрит где находится файл home.html. Находит эту папку. Это папка about
  2. Дальше смотрит кто является родителем папки about. Им является корень проекта
  3. В корне проекта ищет папку source. Если нашел, все ок, идем дальше
  4. В папке source ищет папку img
  5. В папке img находит файл first.png

Если, например, внутри папки home была еще одна папка, и в ней была бы еще одна страница, то путь до файла first.png, внутри этой страницы, выглядел бы вот так:

Теперь все

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

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

Странный мир путей файлов в Windows

Пути файловых систем в Windows страннее, чем можно подумать. В любой производной от Unix системе пути на удивление просты: если нечто начинается с / , то это путь. Но всё совершенно иначе в Windows, которая имеет озадачивающее разнообразие схем составления пути.

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

Стоит заметить, что статья ограничивается только тем типом путей, который видит пользователь приложений Windows (обусловленный Win32 API). Под этим слоем есть ещё больше любопытного, в основном касающегося тех, кто пишет драйверы оборудования и тому подобное.

Вкратце

Форматы абсолютных путей

Название Пример
Путь к диску C:\Program Files\HAL 9000
UNC-путь \\Media\Pictures\Worth\1000 words
Путь к устройству (литеральный) \\?\D:\Plans\Marshall
Путь к устройству (нормализованный) \\.\D:\Projects\Human Genome

Форматы относительных путей

Название Примеры
Относительный к текущей папке .\Manhattan , ..\Plans
Относительный к текущему диску \Pacts
Относительный к текущей папке диска D:Warsaw

Запрещённые символы

Символы Валидность
< > ” / \ |? * Никогда не допускаются
. Не допускается в качестве последнего символа
: Не допускается, за исключением потоков данных

Ограничения длины

Элемент Максимальная длина
Путь 32767 (или 260) символов
Имя файла или папки 255 символов

Схемы путей Windows

В Windows существует три разных вида абсолютного пути и три разных типа относительного пути.

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

Абсолютные, или полные пути — это завершённые пути, сами по себе уникальным образом идентифицирующие местоположение в файловой системе.

Пути к диску

Пути к диску — это старые добрые пути, которые мы знаем и любим, они состоят из буквы диска и последовательности папок.

UNC-пути

UNC расшифровывается как Universal Naming Convention, это описание файлов, начинающееся с \\ , часто используемое для ссылок на сетевые накопители. Первый сегмент после \\ — это хост, который может быть или сервером с именем, или IP-адресом:

UNC-пути также можно использовать для доступа к локальным дискам:

Или с использованием имени компьютера:

Символ $ в C$ обозначает скрытую административную общую папку; он не заменяет двоеточие рядом с именем диска : . Общие диски в стиле C$ — это просто удобные ярлыки, автоматически создаваемые Windows. Доступ к дискам через них возможен, только если вы вошли как администратор.

Стоит также заметить, что \\Pipeline сам по себе не валидный путь к папке, он идентифицирует только сервер. Чтобы попасть в папку, нужно добавить имя общей папки.

Пути к устройству

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

  • \\?\
  • \\.\

Синтаксис доступа к локальной папке выглядит как один из этих вариантов:

Если вам нужно ещё больше загадочности, то можно также подставить эквивалентный Z: идентификатор устройства:

Здесь Volume <59e01a55-88c5-411e-bf0a-92820bdb2549>— это идентификатор дискового тома, на котором находится Z: в компьютере.

Также существует специальный синтаксис для описания UNC-путей как путей к устройству:

В путях к устройству часть, идущая после \\?\ или \\.\ — это имя, определённое во внутреннем пространстве имён Object Manager Windows. Те, кому любопытно исследовать это пространство имён, могут скачать инструмент WinObj и посмотреть.

Нормализованные и литеральные пути к устройству

Так в чём же разница между \\?\ и \\.\ ?

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

Путь \\?\ пропускает этот этап очистки, а \\.\ не пропускает. Поэтому можно назвать пути \\?\ литеральными путями к устройству, а \\.\ — нормализованными путями к устройству.

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

Относительные пути

Относительные пути — это неполные пути, которые для уникальной идентификации местоположения необходимо скомбинировать с другим путём.

Пути, относительные к текущей папке

Эти пути используют в качестве начальной точки текущую папку, например, .\Torquay относится к подпапке текущей папки, а ..\Wales относится к подпапке родителя текущей папки.

Папки, относительные к корню текущего диска

Если начать путь с одной \ , то путь интерпретируется как относительный к корню текущего диска. Поэтому если вы находитесь в любом месте диска E: и введёте \Africa , то окажетесь в E:\Africa .

Когда доступ к текущей папке выполняется через UNC-путь, то путь, относительный к текущему диску, интерпретируется относительно к общей корневой папке, допустим \\Earth\Asia .

Пути, относительные к текущей папке диска

Эти более редко используемые пути указывают диск без обратной косой черты, например E:Kreuzberg , и интерпретируются относительно к текущей папке этого накопителя. На самом деле это имеет смысл только в контексте оболочки командной строки, отслеживающей текущую рабочую папку для каждого диска.

Это единственный тип путей, не поддерживаемый Fileside, потому что в нём нет понятия текущей папки каждого диска. Текущую папку имеют только панели.

Нормализация

Как говорилось ранее, все пути, за исключением литеральных путей к устройству, перед использованием проходят процесс нормализации. Этот процесс состоит из следующих этапов:

  • Замена косых черт ( / ) на обратные косые черты ( \ )
  • Сворачивание повторяющихся разделителей в виде обратных косых черт в один
  • Резолвинг относительных путей заменой всех . или ..
  • Отсечение завершающих пробелов и точек

Правила именования в Windows

Теперь рассмотрим отдельные элементы, из которых состоит путь. Существует множество ограничений имён, которые можно использовать для файлов и папок.

Запрещённые символы

В имени нельзя использовать следующие символы:

Также исключаются любые непечатаемые символы со значением ASCII меньше 32.

Хитрое двоеточие

В большинстве случаев : также запрещено.

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

Опасная точка

Символ . допустим внутри или в начале имени, но запрещён в конце.

Начинающие и завершающие пробелы

Любопытно, что Windows допускает пробелы в начале, но не в конце имён. Так как имя с пробелами в начале и конце часто выглядит похожим на имя без пробелов, обычно это ужасная идея, и при переименовании или создании файлов Fileside автоматически удаляет их.

Запрещённые имена

По историческим причинам нельзя использовать следующие имена:

CON , PRN , AUX , NUL , COM0 , COM1 , COM2 , COM3 , COM4 , COM5 , COM6 , COM7 , COM8 , COM9 , LPT0 , LPT1 , LPT2 , LPT3 , LPT4 , LPT5 , LPT6 , LPT7 , LPT8 и LPT9 .

Это включает и имена с расширениями. Например, если вы назовёте файл COM1.txt , то внутри он преобразуется в \\.\COM1\ и интерпретируется самой Windows как устройство. А это не то, что нам нужно.

Чувствительность к регистру

В большинстве случаев Windows не делает различий между символами в верхнем и нижнем регистре в путях.

C:\Polish hamlet , c:\polish Hamlet , C:\Polish Hamlet и C:\POliSh hAMlET считаются абсолютно одинаковыми.

Однако с обновления Windows 10 за апрель 2018 года файловые системы NTFS имеют опцию включения чувствительности к регистру на уровне папок.

Ограничения длины

Мы ещё не закончили: ограничения есть и на длину.

Традиционно длина пути в Windows не могла превышать 260 символов. Даже сегодня это справедливо для некоторых приложений, если только их разработчики не предприняли мер для обхода этого ограничения.

Этот обход заключается в преобразовании каждого пути в литеральный путь к устройству перед передачей его Windows. Сделав это, мы сможем обойти ограничение в 260 символов и увеличить его до чуть более щедрого предела в 32767 символов.

Имена

Имена файлов и папок не могут быть длиннее 255 символов.

Так много способов сказать одно и то же

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *