Может ли относительное имя файла быть длиннее абсолютного

Обновлено: 04.07.2024

Путь — это уникальное расположение файла или папки в файловой системе операционной системы. Путь к файлу — это комбинация символов / и буквенно-цифровых символов.

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

  • Начните с корневого каталога ( / ) и продвигайтесь вниз.
  • Напишите косую черту ( / ) после каждого имени каталога (последнее не обязательно)

Например:

будет работать, только если файл «abc.sql» существует в вашем текущем каталоге. Однако, если этот файл отсутствует в вашем рабочем каталоге и присутствует где-то еще, скажем, в /home/kt , тогда эта команда будет работать, только если вы будете использовать ее, как показано ниже:

В приведенном выше примере, если первым символом пути является /, местоположение файла должно быть определено относительно корня. Когда у вас есть более одного / в имени пути, для каждого такого / вы должны спуститься на один уровень в файловой системе, как в приведенном выше примере, kt на один уровень ниже home и, следовательно, на два уровня ниже root.

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

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

Относительный путь определяется как путь, связанный с текущей работой напрямую (pwd). Он начинается в вашем текущем каталоге и никогда не начинается с / .


Чтобы быть более конкретным, давайте взглянем на рисунок ниже, на котором, если мы ищем фотографии, то абсолютный путь к ним будет указан как /home/jono/photos, но при условии, что мы уже присутствует в каталоге jono, тогда относительный путь к нему можно записать как простые фотографии.

Использование . и .. в относительных путях

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

На самом деле это означает, что если мы сейчас находимся в каталоге /home/kt/abc и теперь вы можете использовать .. в качестве аргумента для cd для перехода в родительский каталог /home/kt как :

ПРИМЕЧАНИЕ. Теперь / при использовании с .. имеет другое значение; вместо перехода на уровень вниз он перемещается на один уровень вверх:

Пример абсолютного и относительного пути

  1. Изменение каталога с концепцией относительного пути:
  2. Изменение каталога с концепцией абсолютного пути:

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

Ваш сайт существует сразу в двух мирах: реальном и виртуальном.

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

Таким образом, этот дуализм является корнем многих проблем.

Однако, чтобы разобраться в этих вещах, достаточно усвоить всего две простые концепции:

  1. Разница между абсолютным и относительным путями.
  2. Разница между корнем веб-сервера и корнем файловой системы.

Разница между абсолютным и относительным путями

Это довольно просто.

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

Это точно так же, как и в реальной жизни. Учитывая абсолютный адрес, почтовый адрес, например «7119 W Sunset Blvd West Hollywood, CA 90046», вы можете найти местоположение из любого места. Однако, учитывая относительные направления, например, "держать три квартала в этом направлении, а затем повернуть направо" будет работать только из текущего местоположения, в противном случае вы будете сбиты с толку.

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

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

Итак, еще раз: абсолютный путь — это путь, начинающийся от корня системы

Некоторые примеры абсолютных путей:

В Windows файловая система не имеет общего корня для всей системы, а разделена между дисками, поэтому абсолютные пути начинаются с буквы диска. Принимая во внимание, что у каждого диска есть собственный корень, который представляет собой обратную косую черту - \ . Таким образом, вы можете ввести cd \ и перейти в корень текущего диска.

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

Теперь вы можете отличить абсолютный путь от относительного — он начинается с корня, а именно:

  • в файловой системе Unix это /
  • на веб-сервере это снова /
  • в Windows это либо \ (для текущего диска), либо D:\ (для всей системы)

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

Если вы не указали корень, это означает, что ваш путь относительный.

Самый простой пример относительного пути — просто имя файла, например index.html . Поэтому следует быть осторожным с относительными путями. Если ваш текущий каталог /about/, тогда index.html будет одним, но если вы переключите его на /contacts/, то это будет другой.

Другие примеры относительных путей:

  • ./file.php (файл находится в текущей папке. То же, что и просто file.php )
  • images/picture.jpg (файл находится в папке с изображениями, которая находится в текущем каталоге)
  • ../file.php (файл находится в папке на один уровень выше текущей папки)
  • ../../file.php (файл находится в папке на два уровня выше текущей директории)

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

Корень документа

Это самая интересная часть. Есть точка, где реальный мир встречается с виртуальным.

И тут хорошо видно суть: есть общая для обоих адресов часть: /forum/index.php , которая и является источником путаницы.

Чтобы получить рабочий путь к этому файлу, мы должны добавить недостающую часть. В нашем примере это /var/www/site , который называется DOCUMENT_ROOT и является наиболее важным параметром конфигурации для взаимодействия с файловой системой. В PHP вы можете получить к нему доступ через $_SERVER['DOCUMENT_ROOT'] .

Теперь вы можете сказать, что для того, чтобы любой путь к файловой системе работал, он должен быть абсолютным и создан с использованием DOCUMENT_ROOT . Таким образом, правильный PHP-код для доступа к /forum/index.php из PHP будет

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

Пути веб-сервера

намного проще.

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

Поэтому, чтобы сделать HTML-ссылку абсолютной, просто создайте ее из корня сайта, и вы больше никогда не увидите ошибку 404 для существующего файла!

Представьте, что на вашем сайте есть два раздела,

и в файле info.php вы хотите сделать ссылку на vacancy.php . Если сделать как есть, то браузер его не найдет! Помните, что он всегда пытается создать ссылку на полную, используя текущее местоположение, то есть /about/, поэтому в результате получается /about/vacancy.php, что неверно. Чтобы сделать это правильно, мы должны сделать эту ссылку абсолютной, начиная с корня сайта: /job/vacancy.php

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

Консольные скрипты. Единая точка входа

К сожалению, для консольных скриптов наша полезная переменная $_SERVER['DOCUMENT_ROOT'] недоступна. Таким образом, мы обязаны использовать пути относительно вызывающего скрипта, полученные из текущего местоположения скрипта.

Например, если ваше приложение размещено в /var/www/app и есть две подпапки, /var/www/app/bin и /var/www/app/config , и вы хотите получить доступ к последней из первый, вы можете написать следующий код:

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

Вот почему рекомендуется использовать единую точку входа для вашего приложения. Или, как в нашем случае, две точки входа, одна для веб-запросов и одна для консольных команд.

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

  • /var/www/app/html/index.php
  • /var/www/app/bin/console.php
  • /var/www/app/config/bootstrap.php

Тогда мы могли бы написать следующий код (среди прочего) в bootstrap.php:

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

А затем и в index.php, и в console.php

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

Примеры реализации можно найти в Laravel Artisan или консоли Symfony.

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

Полезные команды и константы PHP

  • __FILE__ константа, содержащая полный абсолютный путь к файлу, который выполняется в данный момент.
  • __DIR__ константа, содержащая путь к каталогу, в котором находится исполняемый в данный момент файл (фактически это просто __FILE__ без имени файла и косой черты в конце)
  • команда realpath() преобразует относительный путь в абсолютный
  • getcwd() предоставит вам текущий каталог

Статьи по теме:

Есть вопрос?

Я единственный человек, имеющий золотой значок в , и в Stack Overflow, и я стремлюсь указать правильный путь для разработчиков PHP.

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

СМ. ТАКЖЕ:

Последние комментарии:

  • 27.03.22 21:41
    Джеймс Миллер за (единственно подходящее) руководство по PDO:
    Как люди делают такие красивые текстовые фрагменты кода и обычного текста. бр />читать дальше
  • 27.03.22 21:37
    Джеймс Миллер за (единственно правильный) учебник по PDO:
    Я пытаюсь подражать вашему блогу, используя хранимые процедуры. Две таблицы. комментарии и ответ. родитель.
    читать дальше
  • 27.03.22 14:00
    Вишвас Кумар Синха за Забавные истории произошли на форумах PHP:
    Черт возьми, большое спасибо за то, что спасли мой день, вы, ребята, сделали мое воскресенье точным и.
    читать дальше
  • 14.03.22 11:48
    Jolly Boy для Top 10:
    Спасибо за нападки на начинающих программистов на stackoverflow. Держу пари, ты чувствуешь себя очень тяжело. Вместо.
    читать дальше
  • 12.03.22 20:50
    Дон за Аутентификацию пользователя с использованием PDO и password_verify():
    Спасибо за написание ЛУЧШЕГО (только?) понятного вводного руководства по расшифровке PDO/MySQLi PHP.
    читать дальше

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

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

  • > до и пустая строка после для цитаты
  • четыре пробела для обозначения блока кода

Комментарии:

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

DIR хорошо подходит для включения файлов в скрипты. Но для указания на изображения или для генерации URL это не работает, так как вам нужен веб-корень. Если вы переключаетесь между Windows и Linux, $projectDir с заменой preg также не работает. Вот пример:

Это вывод из приведенного выше для Windows:

Здесь, в Linux со скриптом в корневом каталоге веб-сервера

Ответить:

Я чувствую, что вы слишком много думаете об этом.

Для указания на изображения это намного, намного проще, потому что веб-корень всегда просто / независимо от того, что. В linux, в windows, в apache или nginx, с бэкендом PHP или node.js — корневой веб-сайт — это просто /

Так что вам просто нужно написать

и это будет работать везде.

Иногда путь проекта отличается при локальной разработке и динамическом развертывании. В этом случае полезно иметь путь от корня веб-сайта к сценарию, если используются абсолютные пути от корня веб-сайта. Один из способов добиться этого: rtrim(dirname($_SERVER['SCRIPT_NAME']), ); Также на днях я заметил, что в проекте с перезаписью URL использование относительных путей не работает.

Ответить:

Гораздо проще использовать переменную __DIR__.

И да, относительные URL вообще не должны использоваться. Все локальные URL должны быть указаны как абсолютные пути, т.е. /articlas/paths

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

Эй, я хочу получить доступ к файлу, расположенному в другой папке. Файл называется config.php и содержит конфигурации базы данных и находится в папке с библиотеками. Когда мне нужно это в другом файле с именем table.php внутри папки администраторов, это дает мне большую ошибку «требовать не найдено blablablaa». Помогите!

Ответить:

Просто прочитайте статью выше, в ней объясняется, что делать. В основном вам нужно использовать абсолютный путь и использовать для него $_SERVER['DOCUMENT_ROOT']

Большое спасибо.Я пытаюсь создать безопасный сайт, где мои файлы HTML/CSS/JS находятся в корневом каталоге веб-сервера, а все мои файлы PHP находятся в корневом каталоге файловой системы (думаю, у меня это правильно) и поэтому не видны посторонним. Я буду изучать эту страницу некоторое время, пока не сделаю все правильно.

Ответить:

Большое спасибо за добрые слова.
Пожалуйста, не стесняйтесь спрашивать, если у вас есть какие-либо вопросы. Имейте в виду, что таким образом вы поможете мне сделать статью лучше, поэтому приветствуются все вопросы!

Вы должны написать книгу. Серьезно. Очень хорошо объяснили и очень помогли. Спасибо, что поделились своими знаниями.

это здорово, но, к сожалению, когда скрипт выполняется через cron, он не видит $_SERVER, потому что он не установлен. Что бы вы порекомендовали в качестве временного решения?

Ответить:

Спасибо за очень хороший вопрос! Действительно, это очень вероятный и очень важный случай.

Если ответ вас не удовлетворил, поделитесь своими сомнениями. Спасибо, что помогаете мне делать сайт лучше!

Здравствуйте! У нас есть приложение, размещенное в IIS. Это приложение имеет контроль загрузки файлов. Когда я выбираю файл для загрузки из папки, он берет полный путь вместе с именем файла, и этот полный путь рассматривается как имя файла в системе. Иногда он превышает максимальную длину имени файла и выдает ошибку. Эта функция была рабочим файлом раньше. Но сейчас мы мигрируем на другой сервер. Отсутствует ли какая-либо функция IIS на этом новом сервере, так что он говорит полный путь, а не просто имя файла? Пожалуйста, помогите

Ответить:

Согласно моему опыту, полный путь отправляется, когда тег формы не имеет атрибута "moutipart/form-data". Но у меня мало опыта работы с IIS.

Очень информативная статья.

Согласен. Хорошая статья. Если кто-то объяснит, что базовый каталог — это просто /, это очень поможет, так как большинство людей обычно пропускают это.

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

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

создает каталог с именем TeStDiReCtOrY. Если вы переименовываете каталог или файл, чтобы изменить его регистр, имя каталога или файла отражает регистр строки, используемой при переименовании. Например, следующий код переименовывает файл с именем test.txt в Test.txt:

Однако при сравнении имен каталогов и файлов регистр не учитывается. Если вы ищете файл с именем «test.txt», API-интерфейсы файловой системы .NET игнорируют регистр при сравнении. «Test.txt», «TEST.TXT», «test.TXT» и любая другая комбинация прописных и строчных букв будет соответствовать «test.txt».

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

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

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

Дополнительную информацию см. в следующих подразделах:

Чтобы узнать, как настроить Windows 10 для поддержки длинных путей к файлам, см. статью Ограничение максимальной длины пути.

Имена файлов и каталогов

Все файловые системы следуют одним и тем же общим соглашениям об именах для отдельных файлов: базовое имя файла и необязательное расширение, разделенные точкой. Однако каждая файловая система, такая как NTFS, CDFS, exFAT, UDFS, FAT и FAT32, может иметь определенные и отличающиеся правила формирования отдельных компонентов пути к каталогу или файлу. Обратите внимание, что каталог — это просто файл со специальным атрибутом, определяющим его как каталог, но в остальном он должен соответствовать тем же правилам именования, что и обычный файл. Поскольку термин каталог просто относится к особому типу файла в том, что касается файловой системы, в некоторых справочных материалах используется общий термин файл для охвата обеих концепций каталогов. и файлы данных как таковые. По этой причине, если не указано иное, любые правила или примеры именования или использования файла также должны применяться к каталогу. Термин путь относится к одному или нескольким каталогам, обратной косой черте и, возможно, имени тома. Дополнительные сведения см. в разделе «Пути».

Ограничения по количеству символов также могут различаться в зависимости от файловой системы и используемого формата префикса имени пути. Это еще более усложняется поддержкой механизмов обратной совместимости. Например, более старая файловая система MS-DOS FAT поддерживает не более 8 символов для основного имени файла и 3 символа для расширения, всего 12 символов, включая разделитель точек. Это обычно известно как имя файла 8.3. Файловые системы Windows FAT и NTFS не ограничены именами файлов версии 8.3, поскольку они имеют поддержку длинных имен файлов, но они по-прежнему поддерживают версию 8.3 длинных имен файлов.

Соглашения об именах

Следующие основные правила позволяют приложениям создавать и обрабатывать допустимые имена для файлов и каталогов независимо от файловой системы:

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

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

При необходимости используйте обратную косую черту в имени тома, например, "C:\" в "C:\path\file" или "\\server\share" в "\\server\share\path". \file" для имен универсального соглашения об именах (UNC). Дополнительные сведения об именах UNC см. в разделе «Ограничение максимальной длины пути».

Не предполагайте чувствительность к регистру. Например, считайте имена OSCAR, Oscar и oscar одинаковыми, хотя некоторые файловые системы (например, POSIX-совместимая файловая система) могут считать их разными. Обратите внимание, что NTFS поддерживает семантику POSIX для учета регистра, но это не поведение по умолчанию. Дополнительные сведения см. в разделе CreateFile.

Обозначения томов (буквы дисков) также нечувствительны к регистру. Например, "D:\" и "d:\" относятся к одному и тому же тому.

Используйте любой символ текущей кодовой страницы для имени, включая символы Unicode и символы расширенного набора символов (128–255), за исключением следующих:

Следующие зарезервированные символы:

  • < (меньше чем)
  • > (больше)
  • : (двоеточие)
  • " (двойные кавычки)
  • / (косая черта)
  • \ (обратная косая черта)
  • | (вертикальная полоса или труба)
  • <ли>? (вопросительный знак)
  • * (звездочка)

Целое значение, равное нулю, иногда называемое символом NUL ASCII.

Символы, целочисленные представления которых находятся в диапазоне от 1 до 31, за исключением альтернативных потоков данных, где эти символы разрешены. Дополнительные сведения о файловых потоках см. в разделе Файловые потоки.

Любой другой символ, который не разрешен целевой файловой системой.

Используйте точку в качестве компонента каталога в пути для представления текущего каталога, например ".\temp.txt". Дополнительные сведения см. в разделе Пути.

Используйте две последовательные точки (..) в качестве компонента каталога в пути для представления родительского каталога текущего каталога, например "..\temp.txt". Дополнительные сведения см. в разделе Пути.

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

CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 и LPT9. Также избегайте этих имен, за которыми сразу следует расширение; например, NUL.txt не рекомендуется. Дополнительные сведения см. в разделе Пространства имен.

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

Короткие и длинные имена

Длинным именем файла считается любое имя файла, которое выходит за рамки короткого стиля именования MS-DOS (также называемого 8.3). Когда вы создаете длинное имя файла, Windows также может создать короткую форму имени 8.3, называемую псевдонимом 8.3 или коротким именем, и также сохранить ее на диске. Этот псевдоним 8.3 можно отключить по соображениям производительности либо для всей системы, либо для указанного тома, в зависимости от конкретной файловой системы.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: псевдонимы 8.3 нельзя отключить для указанных томов до Windows 7 и Windows Server 2008 R2.

Во многих файловых системах имя файла будет содержать тильду (~) в каждом компоненте имени, которое слишком длинно для соответствия правилам именования 8.3.

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

Чтобы запросить имена файлов 8.3, длинные имена файлов или полный путь к файлу из системы, рассмотрите следующие варианты:

  • Чтобы получить форму длинного имени файла в формате 8.3, используйте функцию GetShortPathName.
  • Чтобы получить версию короткого имени с длинным именем файла, используйте функцию GetLongPathName.
  • Чтобы получить полный путь к файлу, используйте функцию GetFullPathName.

В более новых файловых системах, таких как NTFS, exFAT, UDFS и FAT32, Windows сохраняет длинные имена файлов на диске в кодировке Юникод, что означает, что всегда сохраняется исходное длинное имя файла. Это верно, даже если длинное имя файла содержит расширенные символы, независимо от кодовой страницы, которая активна во время операции чтения или записи с диска.

Файлы с длинными именами файлов можно копировать между разделами файловой системы NTFS и разделами файловой системы Windows FAT без потери информации об именах файлов. Это может быть не так для более старых файловых систем MS-DOS FAT и некоторых типов файловых систем CDFS (CD-ROM), в зависимости от фактического имени файла. В этом случае по возможности заменяется короткое имя файла.

Пути

Путь к указанному файлу состоит из одного или нескольких компонентов, разделенных специальным символом (обратной косой чертой), причем каждый компонент обычно представляет собой имя каталога или файла. имя, но с некоторыми заметными исключениями, обсуждаемыми ниже. Часто для интерпретации пути системой очень важно, как выглядит начало или префикс пути. Этот префикс определяет пространство имен, которое использует путь, и, кроме того, какие специальные символы используются в какой позиции пути, включая последний символ.

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

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

Полный и относительный пути

Для функций Windows API, управляющих файлами, имена файлов часто могут указываться относительно текущего каталога, а для некоторых API требуется полный путь. Имя файла относится к текущему каталогу, если оно не начинается с одного из следующих символов:

  • Имя UNC любого формата, которое всегда начинается с двух символов обратной косой черты ("\\"). Дополнительные сведения см. в следующем разделе.
  • Обозначение диска с обратной косой чертой, например "C:\" или "d:\".
  • Одна обратная косая черта, например, "\directory" или "\file.txt". Его также называют абсолютным путем.

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

  • «C:tmp.txt» относится к файлу с именем «tmp.txt» в текущем каталоге на диске C.
  • "C:tempdir\tmp.txt" относится к файлу в подкаталоге текущего каталога на диске C.

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

  • "..\tmp.txt" указывает файл с именем tmp.txt, расположенный в родительском каталоге текущего каталога.
  • "..\..\tmp.txt" указывает файл, который находится на два каталога выше текущего каталога.
  • "..\tempdir\tmp.txt" указывает файл с именем tmp.txt, расположенный в каталоге с именем tempdir, который является равноправным каталогом для текущего каталога.

Относительные пути могут сочетать оба типа примеров, например "C.\tmp.txt". Это полезно, потому что, хотя система отслеживает текущий диск вместе с текущим каталогом этого диска, она также отслеживает текущие каталоги в каждой из разных букв диска (если в вашей системе их несколько), независимо от какое обозначение диска установлено в качестве текущего диска.

Ограничение максимальной длины пути

В выпусках Windows до Windows 10 версии 1607 максимальная длина пути — MAX_PATH, которая определяется как 260 символов. В более поздних версиях Windows для снятия ограничения требуется изменение раздела реестра или использование инструмента групповой политики. Полную информацию см. в разделе Ограничение максимальной длины пути.

Пространства имен

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

Пространства имен файлов Win32

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

При файловом вводе-выводе префикс "\\?\" к строке пути указывает API Windows отключить всю строку синтаксического анализа и отправить строку, следующую за ней, прямо в файловую систему. Например, если файловая система поддерживает большие пути и имена файлов, вы можете превысить ограничения MAX_PATH, которые в противном случае применяются API-интерфейсами Windows. Дополнительные сведения об обычном ограничении максимального пути см. в предыдущем разделе Ограничение максимальной длины пути.

Поскольку он отключает автоматическое расширение строки пути, префикс "\\?\" также позволяет использовать ".." и "." в именах путей, что может быть полезно, если вы пытаетесь выполнить операции с файлом с этими в противном случае зарезервированными спецификаторами относительного пути как части полного пути.

Многие, но не все API файлового ввода-вывода поддерживают "\\?\"; вы должны посмотреть справочную тему для каждого API, чтобы быть уверенным.

Обратите внимание, что следует использовать API Unicode, чтобы убедиться, что префикс "\\?\" позволяет превысить MAX_PATH

Пространства имен устройств Win32

Префикс "\\.\" будет обращаться к пространству имен устройств Win32, а не к пространству имен файлов Win32. Так осуществляется доступ к физическим дискам и томам напрямую, минуя файловую систему, если API поддерживает такой тип доступа. Таким образом вы можете получить доступ ко многим устройствам, кроме дисков (например, с помощью функций CreateFile и DefineDosDevice).

Например, если вы хотите открыть последовательный порт 1 системы, вы можете использовать "COM1" в вызове функции CreateFile. Это работает, потому что COM1–COM9 являются частью зарезервированных имен в пространстве имен NT, хотя использование префикса «\\.\» также будет работать с этими именами устройств. Для сравнения, если у вас установлена ​​плата последовательного расширения на 100 портов и вы хотите открыть COM56, вы не сможете открыть ее с помощью «COM56», поскольку для COM56 нет предопределенного пространства имен NT. Вам нужно будет открыть его с помощью "\\.\COM56", потому что "\\.\" переходит непосредственно к пространству имен устройства, не пытаясь найти предопределенный псевдоним.

Другим примером использования пространства имен устройств Win32 является использование функции CreateFile с "\\.\PhysicalDiskX" (где X – допустимое целочисленное значение) или " \\.\CdRomX". Это позволяет вам обращаться к этим устройствам напрямую, минуя файловую систему. Это работает, потому что эти имена устройств создаются системой по мере перечисления этих устройств, а некоторые драйверы также создают другие псевдонимы в системе. Например, драйвер устройства, реализующий имя "C:\", имеет собственное пространство имен, которое также является файловой системой.

API, использующие функцию CreateFile, обычно работают с префиксом "\\.\", поскольку функция CreateFile используется для открытия как файлов, так и устройств, в зависимости от используемых вами параметров.

Если вы работаете с функциями Windows API, вы должны использовать префикс "\\.\" для доступа только к устройствам, а не к файлам.

Большинство API не поддерживают "\\.\"; только те, которые предназначены для работы с пространством имен устройства, распознают его. Всегда проверяйте справочную тему для каждого API, чтобы быть уверенным.

Пространства имен NT

Есть также API, которые позволяют использовать соглашение о пространстве имен NT, но диспетчер объектов Windows в большинстве случаев делает это ненужным. Для иллюстрации полезно просматривать пространства имен Windows в обозревателе системных объектов с помощью инструмента Windows Sysinternals WinObj. Когда вы запускаете этот инструмент, вы видите пространство имен NT, начинающееся с корня, или "\". Подпапка под названием "Global??" где находится пространство имен Win32. Объекты именованных устройств находятся в пространстве имен NT в подкаталоге «Device». Здесь вы также можете найти Serial0 и Serial1, объекты устройства, представляющие первые два COM-порта, если они есть в вашей системе. Объект устройства, представляющий том, может иметь вид HarddiskVolume1, хотя числовой индекс может отличаться. Имя «DR0» в подкаталоге «Harddisk0» является примером объекта устройства, представляющего диск, и т. д.

Чтобы сделать эти объекты устройств доступными для приложений Windows, драйверы устройств создают символическую ссылку (символическую ссылку) в пространстве имен Win32 "Global??" на соответствующие объекты устройств. Например, COM0 и COM1 в разделе "Глобальные??" subdirectory — это просто символические ссылки на Serial0 и Serial1, «C:» — это символическая ссылка на HarddiskVolume1, «Physicaldrive0» — это символическая ссылка на DR0 и так далее. Без символической ссылки указанное устройство «Xxx» не будет доступно ни одному приложению Windows, использующему соглашения о пространстве имен Win32, как описано ранее. Однако дескриптор этого устройства может быть открыт с помощью любых API, поддерживающих абсолютный путь пространства имен NT в формате "\Device\Xxx".

С добавлением многопользовательской поддержки через службы терминалов и виртуальные машины возникла необходимость в виртуализации общесистемного корневого устройства в пространстве имен Win32. Это было достигнуто путем добавления символической ссылки с именем «GLOBALROOT» в пространство имен Win32, которое вы можете увидеть в «Global??» подкаталог инструмента браузера WinObj, который обсуждался ранее, и может получить доступ через путь «\\?\GLOBALROOT». Этот префикс гарантирует, что путь, следующий за ним, соответствует истинному корневому пути диспетчера системных объектов, а не пути, зависящему от сеанса.

Путь указывает расположение файлов, например, C:\work\my_data (на платформах Microsoft ® Windows ®) или /usr/work/my_data (на платформах Linux ® или Mac). Если вы не задаете имя пути при доступе к файлу, MATLAB ® сначала ищет в текущей папке. Чтобы указать файл в определенном месте, укажите путь.

Спецификации имени пути различаются в зависимости от платформы, на которой вы используете MATLAB. Используйте функцию fullfile для создания имен путей в инструкциях, которые работают на любой платформе. Эта функция особенно полезна, когда вы предоставляете код кому-то, кто использует его на платформе, отличной от вашей.

fullfile вставляет разделители файлов, зависящие от платформы, где это необходимо. Символ-разделитель файлов — это символ, который отличает один уровень папки от другого в имени пути. Косая черта (/) является допустимым разделителем на любой платформе. Обратная косая черта (\) допустима только на платформах Microsoft Windows. В полном пути к папке последняя косая черта не обязательна. Введите filesep в командном окне, чтобы определить правильный символ-разделитель файлов для использования на вашей платформе.

Чтобы определить платформу, на которой в данный момент работает MATLAB, используйте функции ismac, ispc и isunix.

Символы в именах файлов и папок

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

Избегайте использования символов ударения, таких как умляуты или циркумфлексы, в именах путей. MATLAB может не распознать путь. Кроме того, попытки сохранить файл по такому пути могут привести к непредсказуемому поведению.

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

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

MATLAB всегда принимает абсолютные имена путей (также называемые полными именами путей), такие как I:/Documents/My_Files или /users/myuserid/Homework/myfile.m . Абсолютный путь может начинаться с любого из следующего:

Буква диска на платформах Microsoft Windows, например C:\ .

символ '/' на платформах Linux.

Некоторые функции MATLAB также поддерживают имена относительных путей. Если не указано иное, имя пути относится к текущей папке. Например:

myfile.m относится к файлу myfile.m в текущей папке.

myfolder относится к папке myfolder в текущей папке.

../myfolder/myfile.m относится к файлу myfile.m в папке myfolder, где myfolder находится на том же уровне, что и текущая папка. Каждое повторение ../ в начале пути перемещает папку вверх на дополнительный уровень.

Совет

Если в редакторе открыто и закреплено несколько документов, вы можете скопировать абсолютный путь любого из этих документов в буфер обмена. Эта практика полезна, если вам нужно указать абсолютный путь в другом инструменте MATLAB или внешнем приложении. Щелкните правой кнопкой мыши вкладку документа и выберите "Копировать полный путь в буфер обмена".

Частичные имена путей в MATLAB

Частичное имя пути — это последняя часть полного имени пути для расположения на пути поиска MATLAB. Некоторые функции принимают частичные имена путей.

Используйте частичный путь для:

Укажите расположение независимо от того, где установлен MATLAB.

Найти функцию в определенном наборе инструментов, если несколько наборов инструментов содержат функции с таким именем. Например, чтобы открыть файл для функции set в продукте Database Toolbox™, введите:

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

Указание символа at ( @ ) в именах папок методов необязательно.

Найдите частные файлы и файлы методов, которые иногда скрыты.

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

Максимальная длина имен путей в MATLAB

Максимально допустимая длина имени пути зависит от вашей платформы.

Например, на платформах Microsoft Windows:

Максимальная длина называется MAX_PATH .

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

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

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

Чувствительность к регистру в именах файлов

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

Чувствительность к регистру при вызове функций

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

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

Чувствительность к регистру при загрузке и сохранении файлов

Платформы Linux — имена файлов вводятся с учетом регистра.

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

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

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

При загрузке или чтении из файла MATLAB обращается к файлу с указанным именем, стоящим выше по пути поиска, независимо от регистра. Например, если вы пытаетесь загрузить MYFILE, а myfile.mat выше в пути поиска, чем MYFILE.MAT , тогда MATLAB загружает myfile.mat без предупреждения о несоответствии регистра.

При сохранении или записи в файл, если вы укажете имя файла, который уже существует в папке, MATLAB обращается к существующему файлу без предупреждения. Например, если вы сохраняете данные в файл с именем myfile с помощью функции сохранения, а файл MYFILE.mat уже существует в папке, данные заменяют содержимое файла MYFILE.mat. Однако имя файла остается MYFILE.mat .

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