Имена каталогов
Имя каталога — это строка, которая должна обозначать каталог, если она вообще обозначает какой-либо файл. Каталог фактически является разновидностью файла и имеет имя файла (называемое именем файла каталога), связанное с именем каталога, но обычно не совпадающее с ним. (Это не совсем то же самое, что обычная терминология POSIX.) Эти два имени одной сущности связаны синтаксическим преобразованием. В GNU и других POSIX-подобных системах всё просто: чтобы получить имя каталога, добавьте «/» к имени файла каталога, если оно ещё не заканчивается на «/». В MS-DOS эта связь сложнее.
Различие между именем каталога и именем файла каталога тонкое, но крайне важное. Если переменная Emacs или аргумент функции описаны как имя каталога, имя файла каталога не подходит. Когда file-name-directory возвращает строку, это всегда имя каталога.
Следующие две функции преобразуют имена каталогов в имена файлов каталогов и обратно. Они не выполняют особой обработки подстановок переменных среды, таких как «$HOME», и конструкций «~», «.» и «..».
- Функция: file-name-as-directory filename
-
Эта функция возвращает строку, представляющую filename в форме, которую операционная система интерпретирует как имя каталога (имя каталога). В большинстве систем это означает добавление к строке косой черты, если она ещё не заканчивается на неё.
(file-name-as-directory "~rms/lewis") ⇒ "~rms/lewis/"
- Функция: directory-name-p filename
Эта функция возвращает значение, отличное от
nil, если filename заканчивается символом-разделителем каталогов. В GNU и других POSIX-подобных системах это прямая косая черта «/»; MS-Windows и MS-DOS распознают в качестве разделителей каталогов и прямую косую черту, и обратную косую черту «\».
- Функция: directory-file-name dirname
-
Эта функция возвращает строку, представляющую dirname в форме, которую операционная система интерпретирует как имя файла (имя файла каталога). В большинстве систем это означает удаление из строки конечных разделителей каталогов, если только строка не состоит исключительно из разделителей каталогов.
(directory-file-name "~lewis/") ⇒ "~lewis"
- Функция: file-name-concat directory &rest components
-
Объединяет components с directory, вставляя косую черту перед компонентами, если directory или предыдущий компонент не заканчивается косой чертой.
(file-name-concat "/tmp" "foo") ⇒ "/tmp/foo"Если directory или компоненты равны
nilлибо являются пустой строкой, они игнорируются — сначала они отфильтровываются и никак не влияют на результат.Это почти то же самое, что использовать
concat, но dirname (и компоненты, кроме последнего) могут заканчиваться косыми чертами, а могут и не заканчиваться, и эта функция не будет дублировать эти символы.В большинстве случаев для создания имён файлов с указанием родительских каталогов лучше подходят один или несколько вызовов
expand-file-name(см. Функции раскрытия имён файлов). Используйте эту функцию только в том случае, если некоторые специальные возможностиexpand-file-nameмешают выполнению задачи вашей программы. Например, вам может не подойти специальная обработкаexpand-file-nameконструкций ~, ~user иnilили удаление . и ...
Чтобы получить сокращённую форму имени каталога, используйте эту функцию:
- Функция: abbreviate-file-name filename
-
Эта функция возвращает сокращённую форму filename. Она применяет сокращения, указанные в
directory-abbrev-alist(см. Псевдонимы файлов в Руководстве GNU Emacs), а затем заменяет домашний каталог пользователя на «~», если аргумент обозначает файл в домашнем каталоге или одном из его подкаталогов. Если домашний каталог является корневым каталогом, он не заменяется на «~», поскольку во многих системах это не делает результат короче.Эту функцию можно использовать как для имён каталогов, так и для имён файлов, поскольку она распознаёт сокращения даже внутри имени.
- Функция: file-name-parent-directory filename
Эта функция возвращает имя каталога, являющегося родительским для filename. Если filename находится в корневом каталоге файловой системы, функция возвращает
nil. Предполагается, что относительное значение filename задано относительноdefault-directory; в этом случае возвращаемое значение также будет относительным. Если возвращаемое значение не равноnil, оно заканчивается косой чертой.
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/Directory-Names.html