Spec-Zone.ru › Elisp

Абсолютные и относительные имена файлов

Все каталоги файловой системы образуют дерево, начинающееся с корневого каталога. Имя файла может указывать все имена каталогов, начиная с корня дерева; в этом случае оно называется абсолютным именем файла. Или оно может указывать положение файла в дереве относительно каталога по умолчанию; в этом случае оно называется относительным именем файла. В GNU и других системах, подобных POSIX, после раскрытия начального «~» абсолютное имя файла начинается с «/» (см. сокращение имени файла), а относительное — нет. В MS-DOS и MS-Windows абсолютное имя файла начинается с косой черты или обратной косой черты либо с обозначения диска «x:/», где x — это буква диска.

Функция: file-name-absolute-p filename

Эта функция возвращает t, если файл filename имеет абсолютное имя файла, и nil в противном случае. Имя файла считается абсолютным, если его первый компонент — «~» или «~user», где user — допустимое имя для входа в систему. В следующих примерах предположим, что существует пользователь с именем «rms», но нет пользователя с именем «nosuchuser».

(file-name-absolute-p "~rms/foo")
     ⇒ t
(file-name-absolute-p "~nosuchuser/foo")
     ⇒ nil
(file-name-absolute-p "rms/foo")
     ⇒ nil
(file-name-absolute-p "/user/rms/foo")
     ⇒ t

Имея возможно относительное имя файла, можно раскрыть начальный «~» и преобразовать результат в абсолютное имя с помощью expand-file-name (см. Функции раскрытия имен файлов). Эта функция преобразует абсолютные имена файлов в относительные:

Функция: file-relative-name filename &optional directory

Эта функция пытается вернуть относительное имя, эквивалентное filename, предполагая, что результат будет интерпретироваться относительно directory (абсолютного имени каталога или имени файла-каталога). Если directory не указано или равно nil, по умолчанию используется каталог по умолчанию текущего буфера.

В некоторых операционных системах абсолютное имя файла начинается с имени устройства. В таких системах у filename нет относительного эквивалента, основанного на directory, если они начинаются с имен двух разных устройств. В этом случае file-relative-name возвращает filename в абсолютной форме.

(file-relative-name "/foo/bar" "/foo/")
     ⇒ "bar"
(file-relative-name "/foo/bar" "/hack/")
     ⇒ "../foo/bar"

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

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Relative-File-Names.html

Spec-Zone.ru

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