Абсолютные и относительные имена файлов
Все каталоги файловой системы образуют дерево, начинающееся с корневого каталога. Имя файла может указывать все имена каталогов, начиная с корня дерева; в этом случае оно называется абсолютным именем файла. Или оно может указывать положение файла в дереве относительно каталога по умолчанию; в этом случае оно называется относительным именем файла. В 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