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