Spec-Zone.ru › Elisp

Компоненты имени файла

Операционная система группирует файлы в каталоги. Чтобы указать файл, необходимо указать каталог и имя файла в этом каталоге. Поэтому 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"

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/File-Name-Components.html

Spec-Zone.ru

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