Spec-Zone.ru › Tcl/Tk

filename

ИМЯ
filename — Соглашения об именах файлов, поддерживаемые командами Tcl
ВВЕДЕНИЕ
ТИПЫ ПУТЕЙ
СИНТАКСИС ПУТЕЙ
Unix
/
/etc/passwd
.
foo
foo/bar
../foo
Windows
\\Host\share/file
c:foo
c:/foo
foo\bar
\foo
\\foo
ЗАМЕЩЕНИЕ ТИЛЬДЫ
ПРОБЛЕМЫ ПЕРЕНОСИМОСТИ
СМОТРИТЕ ТАКЖЕ
КЛЮЧЕВЫЕ СЛОВА

Имя

filename — Соглашения об именах файлов, поддерживаемые командами Tcl

Введение

Все команды Tcl и C-процедуры, принимающие имена файлов в качестве аргументов, ожидают, что имена файлов будут в одном из трех форматов, в зависимости от текущей платформы. На каждой платформе Tcl поддерживает стандартные форматы имен файлов для этой платформы. Кроме того, на всех платформах Tcl поддерживает синтаксис, похожий на Unix, предназначенный для удобного создания простых имен файлов. Однако скрипты, предназначенные для переноса, не должны предполагать конкретный формат имен файлов. Вместо этого переносимые скрипты должны использовать команды file split и file join для обработки имен файлов (см. справочную запись file для получения более подробной информации).

Типы путей

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

Синтаксис путей

Правила для локальных имен зависят от значения, возвращаемого в элементе Tcl platform массива tcl_platform:
Unix
На платформах Unix и Apple MacOS X Tcl использует имена путей, где компоненты разделены слешами. Имена путей могут быть относительными или абсолютными, и имена файлов могут содержать любой символ, кроме слеша. Имена файлов . и .. являются специальными и относятся соответственно к текущей директории и родительской директории текущей директории. Несколько смежных символов слеша интерпретируются как один разделитель. Любое количество символов слеша в конце пути просто игнорируется, поэтому пути foo, foo/ и foo// все идентичны, и в частности foo/ не обязательно означает, что к директории обращаются.

Следующие примеры иллюстрируют различные формы имен путей:

/
Абсолютный путь к корневой директории.
/etc/passwd
Абсолютный путь к файлу с именем passwd в директории etc в корневой директории.
.
Относительный путь к текущей директории.
foo
Относительный путь к файлу foo в текущей директории.
foo/bar
Относительный путь к файлу bar в директории foo в текущей директории.
../foo
Относительный путь к файлу foo в директории выше текущей директории.
Windows
На платформах Microsoft Windows Tcl поддерживает имена, относительные к диску и имена стиля UNC. В обоих типах имен могут использоваться как /, так и \ в качестве разделителей директорий. Имена, относительные к диску, состоят из необязательного указателя диска, за которым следует абсолютный или относительный путь. Пути UNC следуют общему формату \\servername\sharename\path\file, но должны, по крайней мере, содержать сервер и общую папку, т.е. \\servername\sharename. В обоих форматах имена файлов . и .. являются специальными и относятся соответственно к текущей директории и родительской директории текущей директории. Следующие примеры иллюстрируют различные формы имен путей:
\\Host\share/file
Абсолютный путь UNC к файлу с именем file в корневой директории точки экспорта share на хосте Host. Обратите внимание, что многократное использование file dirname в этом пути даст //Host/share и никогда не даст только //Host.
c:foo
Путь, относительный к диску, к файлу foo в текущей директории на диске c.
c:/foo
Абсолютный путь к файлу foo в корневой директории диска c.
foo\bar
Относительный путь к файлу bar в директории foo в текущей директории на текущем томе.
\foo
Путь, относительный к тому, к файлу foo в корневой директории текущего тома.
\\foo
Путь, относительный к тому, к файлу foo в корневой директории текущего тома. Это не действительный путь UNC, поэтому предполагается, что дополнительные обратные слеши излишни.

Замена тильды

В дополнение к правилам имен файлов, описанным выше, Tcl также поддерживает замену тильды в стиле csh. Если имя файла начинается с тильды, то имя файла будет интерпретировано так, как если бы первый элемент был заменен на расположение домашней директории для данного пользователя. Если после тильды сразу следует разделитель, то подставляется переменная среды $HOME. В противном случае символы между тильдой и следующим разделителем рассматриваются как имя пользователя, которое используется для извлечения домашней директории пользователя для замены. Это работает в Unix, MacOS X и Windows (кроме очень старых версий).

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

Проблемы совместимости

Не все файловые системы чувствительны к регистру, поэтому скрипты должны избегать кода, зависящего от регистра символов в имени файла. Кроме того, набора символов, разрешенных на разных устройствах, могут отличаться, поэтому скрипты должны выбирать имена файлов, не содержащие специальных символов, таких как: <>:?"/\|. Наиболее безопасный подход — использовать имена, состоящие только из буквенно-цифровых символов. Следует проявлять осторожность с именами файлов, содержащими пробелы (часто встречаются в системах Windows) и именами файлов, где обратный слэш является разделителем директорий (локальные имена путей Windows). Также Windows 3.1 поддерживает только имена файлов с корнем не более 8 символов и расширением не более 3 символов.

На платформах Windows существуют ограничения на длину файлов и путей. Полные пути или имена файлов, превышающие примерно 260 символов, приведут к ошибкам при большинстве операций с файлами.

Еще одна особенность Windows заключается в том, что любое количество заключительных точек «.» в именах файлов полностью игнорируется, поэтому, например, попытки создать файл или директорию с именем «foo.» приведут к созданию файла/директории с именем «foo». Этот факт отражается в результатах file normalize. Кроме того, имя файла, состоящее только из точек «.........» или точек с последующими символами «.....abc», является недопустимым.

См. также

file, glob

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/filename.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/filename.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API