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-2022 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