Проверка доступности
Эти функции проверяют наличие разрешения на доступ к файлу для чтения, записи или выполнения. Если явно не указано иное, они следуют по символическим ссылкам. См. раздел Различение типов файлов.
В некоторых операционных системах можно задавать более сложные наборы разрешений доступа с помощью таких механизмов, как списки управления доступом (ACL). О том, как запрашивать и задавать эти разрешения, см. раздел Расширенные атрибуты файлов.
- Функция: file-exists-p filename
-
Эта функция возвращает
t, если, по всей видимости, существует файл с именем filename. Это не означает, что вы обязательно сможете прочитать файл, а лишь то, что, вероятно, сможете получить сведения о его атрибутах. (В GNU и других POSIX-подобных системах это верно, если файл существует и у вас есть разрешение на выполнение для содержащих его каталогов, независимо от разрешений самого файла.)Если файл не существует или возникли проблемы с определением того, существует ли он, эта функция возвращает
nil.Поскольку имя файла, представляющее собой пустую строку, интерпретируется относительно каталога по умолчанию текущего буфера (см. раздел Абсолютные и относительные имена файлов), вызов
file-exists-pс пустой строкой в качестве аргумента сообщит о каталоге по умолчанию буфера.Каталоги являются файлами, поэтому
file-exists-pможет вернутьt, если ему передан каталог. Однако, посколькуfile-exists-pследует по символическим ссылкам, для имени символической ссылки она возвращаетt, только если цель ссылки существует; если вашей программе на Lisp нужно считать существующими файлами висячие символические ссылки, цель которых не существует, используйтеfile-attributes(см. раздел Атрибуты файлов) вместоfile-exists-p.
- Функция: file-readable-p filename
Эта функция возвращает
t, если файл с именем filename существует и вы можете его прочитать. В противном случае она возвращаетnil.
- Функция: file-executable-p filename
Эта функция возвращает
t, если файл с именем filename существует и вы можете его выполнить. В противном случае она возвращаетnil. В GNU и других POSIX-подобных системах разрешение на выполнение для каталога означает, что вы можете проверять наличие и атрибуты файлов внутри него, а также открывать эти файлы, если это позволяют их режимы доступа.
- Функция: file-writable-p filename
-
Эта функция возвращает
t, если вы можете записать файл filename или создать его, иnilв противном случае. Файл доступен для записи, если он существует и вы можете в него записывать. Файл можно создать, если он не существует, но его родительский каталог существует и вы можете записывать в этот каталог.В приведённом ниже примере файл foo недоступен для записи, поскольку родительский каталог не существует, хотя пользователь мог бы создать такой каталог.
(file-writable-p "~/no-such-dir/foo") ⇒ nil
- Функция: file-accessible-directory-p dirname
-
Эта функция возвращает
t, если у вас есть разрешение открывать существующие файлы в каталоге, имя которого как файла — dirname; в противном случае (например, если такого каталога нет) она возвращаетnil. Значение dirname может быть как именем каталога (например, /foo/), так и именем файла, который является каталогом (например, /foo, без завершающей косой черты).Например, из следующего можно заключить, что любая попытка прочитать файл в /foo/ завершится ошибкой:
(file-accessible-directory-p "/foo") ⇒ nil
- Макрос: with-existing-directory body…
Этот макрос гарантирует, что перед выполнением body переменной
default-directoryприсвоен существующий каталог. Еслиdefault-directoryуже существует, предпочтение отдаётся ему; в противном случае используется какой-либо другой каталог. Этот макрос может быть полезен, например, при вызове внешней команды, которой требуется запускаться в существующем каталоге. Не гарантируется, что выбранный каталог будет доступен для записи.
- Функция: access-file filename string
-
Если вы можете прочитать filename, эта функция возвращает
nil; в противном случае она сигнализирует об ошибке, используя string в качестве текста сообщения об ошибке.Если пользовательский параметр
remote-file-name-access-timeout— положительное число, функция сигнализирует об ошибке, если не завершится за это время (в секундах). Это относится только к удалённым файлам и только в том случае, если дополнительное время не тратится на чтение паролей и тому подобное.
- Функция: file-ownership-preserved-p filename &optional group
-
Эта функция возвращает
t, если удаление файла filename с последующим его созданием заново не изменит владельца файла. Для несуществующих файлов она также возвращаетt.Если необязательный аргумент group не равен
nil, функция также проверяет, останется ли группа файла неизменной.Эта функция не следует по символическим ссылкам.
- Функция: file-modes filename &optional flag
-
Эта функция возвращает биты режима доступа файла filename — целое число, обобщающее разрешения на чтение, запись и выполнение. Эта функция следует по символическим ссылкам. Если файл не существует, возвращаемое значение —
nil.Описание битов режима доступа см. в разделе Разрешения доступа к файлам в руководстве The GNU
CoreutilsManual. Например, если младший бит равен 1, файл исполняем всеми пользователями; если второй младший бит равен 1, файл доступен для записи всем пользователям и т. д. Наибольшее возможное значение — 4095 (7777 в восьмеричной системе), что означает, что у всех есть разрешения на чтение, запись и выполнение, установлен бит SUID как для остальных пользователей, так и для группы, а также установлен sticky-бит.По умолчанию эта функция следует по символическим ссылкам. Однако, если необязательный аргумент flag — символ
nofollow, функция не следует по filename, если это символическая ссылка; это помогает избежать случайного получения битов режима доступа файла в другом месте и лучше согласуется сfile-attributes(см. раздел Атрибуты файлов).Функцию
set-file-modes, которую можно использовать для задания этих разрешений, см. в разделе Изменение имён и атрибутов файлов.(file-modes "~/junk/diffs" 'nofollow) ⇒ 492 ; Decimal integer.(format "%o" 492) ⇒ "754" ; Convert to octal.(set-file-modes "~/junk/diffs" #o666 'nofollow) ⇒ nil$ ls -l diffs -rw-rw-rw- 1 lewis lewis 3063 Oct 30 16:00 diffs
Примечание для MS-DOS: В MS-DOS не существует битов режима доступа, обозначающих исполняемый файл. Поэтому
file-modesсчитает файл исполняемым, если его имя заканчивается одним из стандартных расширений исполняемых файлов, например .com, .bat, .exe и некоторыми другими. Исполняемыми также считаются файлы, начинающиеся с принятой в POSIX сигнатуры ‘#!’, например сценарии оболочки и Perl. Для совместимости с POSIX каталоги тоже считаются исполняемыми. Эти соглашения также используются вfile-attributes(см. раздел Атрибуты файлов).
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/Testing-Accessibility.html