Компоненты имени файла
Операционная система группирует файлы по каталогам. Чтобы указать файл, необходимо указать каталог и имя файла в этом каталоге. Поэтому Emacs рассматривает имя файла как состоящее из двух основных частей: части имени каталога и части имени без каталога (или имени файла в каталоге). Любая из частей может быть пустой. При объединении этих двух частей получается исходное имя файла.
В большинстве систем часть каталога — это всё до последней косой черты включительно (при вводе в MS-DOS или MS-Windows допускается также обратная косая черта); остальная часть — имя без каталога.
Для некоторых целей часть имени без каталога дополнительно делится на собственно имя и номер версии. В большинстве систем номера версий в именах имеют только резервные копии файлов.
- Функция: file-name-directory filename
-
Эта функция возвращает часть filename, содержащую имя каталога, в виде имени каталога (см. Имена каталогов), либо
nil, если filename не содержит части каталога.В GNU и других POSIX-подобных системах строка, возвращаемая этой функцией, всегда заканчивается косой чертой. В MS-DOS она также может заканчиваться двоеточием.
(file-name-directory "lewis/foo") ; GNU example ⇒ "lewis/"(file-name-directory "foo") ; GNU example ⇒ nil
- Функция: file-name-nondirectory filename
-
Эта функция возвращает часть filename, не содержащую имя каталога.
(file-name-nondirectory "lewis/foo") ⇒ "foo"(file-name-nondirectory "foo") ⇒ "foo"(file-name-nondirectory "lewis/") ⇒ ""
- Функция: file-name-sans-versions filename &optional keep-backup-version
-
Эта функция возвращает filename, удалив все номера версий файла, номера версий резервных копий и завершающие тильды.
Если keep-backup-version не равно
nil, то из возвращаемого значения удаляются настоящие номера версий файлов, распознаваемые файловой системой, но номера версий резервных копий сохраняются.(file-name-sans-versions "~rms/foo.~1~") ⇒ "~rms/foo"(file-name-sans-versions "~rms/foo~") ⇒ "~rms/foo"(file-name-sans-versions "~rms/foo") ⇒ "~rms/foo"
- Функция: file-name-extension filename &optional period
-
Эта функция возвращает последнее расширение filename, если оно есть, предварительно применив
file-name-sans-versionsдля удаления части с номером версии или резервной копии. В имени файла расширение — это часть после последней «.» в последнем компоненте имени (за исключением части с номером версии или резервной копии).Эта функция возвращает
nilдля имён файлов без расширения, например foo. Для пустых расширений, как в foo., она возвращает"". Если последний компонент имени файла начинается с «.», эта «.» не считается началом расширения. Поэтому расширение .emacs —nil, а не «.emacs».Если period не равно
nil, возвращаемое значение включает точку, отделяющую расширение; если у filename нет расширения, возвращаемое значение —"".
- Функция: file-name-with-extension filename extension
-
Эта функция возвращает filename с расширением, заданным параметром extension. Если extension начинается с одной точки, она будет удалена. Например:
(file-name-with-extension "file" "el") ⇒ "file.el" (file-name-with-extension "file" ".el") ⇒ "file.el" (file-name-with-extension "file.c" "el") ⇒ "file.el"Обратите внимание, что эта функция выдаст ошибку, если filename или extension пусты либо если filename имеет вид имени каталога (то есть если
directory-name-pвозвращает значение, не равноеnil).
- Функция: file-name-sans-extension filename
-
Эта функция возвращает filename без расширения, если оно есть. Часть с номером версии или резервной копии удаляется только в том случае, если у файла есть расширение. Например,
(file-name-sans-extension "foo.lose.c") ⇒ "foo.lose" (file-name-sans-extension "big.hack/foo") ⇒ "big.hack/foo" (file-name-sans-extension "/my/home/.emacs") ⇒ "/my/home/.emacs" (file-name-sans-extension "/my/home/.emacs.el") ⇒ "/my/home/.emacs" (file-name-sans-extension "~/foo.el.~3~") ⇒ "~/foo" (file-name-sans-extension "~/foo.~3~") ⇒ "~/foo.~3~"Обратите внимание, что «.~3~» в двух последних примерах — это часть с номером резервной копии, а не расширение.
- Функция: file-name-base filename
-
Эта функция представляет собой композицию
file-name-sans-extensionиfile-name-nondirectory. Например,(file-name-base "/my/home/foo.c") ⇒ "foo"
- Функция: file-name-split filename
-
Эта функция разбивает имя файла на компоненты; её можно считать обратной к
string-joinс соответствующим разделителем каталогов. Например,(file-name-split "/tmp/foo.txt") ⇒ ("" "tmp" "foo.txt") (string-join (file-name-split "/tmp/foo.txt") "/") ⇒ "/tmp/foo.txt"
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/File-Name-Components.html