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