Запись в файлы
С помощью функций append-to-file и write-region можно напрямую записать содержимое буфера или его части в файл на диске. Не используйте эти функции для записи в посещаемые файлы: это может вызвать путаницу в механизмах посещения файлов.
- Команда: append-to-file start end filename
-
Эта функция добавляет содержимое области текущего буфера, ограниченной start и end, в конец файла filename. Если этот файл не существует, он создаётся. Эта функция возвращает
nil.Если запись или создание файла filename невозможно, сигнализируется ошибка.
При вызове из Lisp эта функция полностью эквивалентна следующему выражению:
(write-region start end filename t)
- Команда: write-region start end filename &optional append visit lockname mustbenew
-
Эта функция записывает область текущего буфера, ограниченную start и end, в файл, указанный аргументом filename.
Если start равен
nil, команда записывает в файл всё содержимое буфера (а не только доступную часть) и игнорирует end.Если start — строка, то
write-regionзаписывает или добавляет эту строку вместо текста из буфера. В этом случае end игнорируется.Если append не равен
nil, указанный текст добавляется к существующему содержимому файла (если оно есть). Если append — число,write-regionпереходит к указанному смещению в байтах от начала файла и записывает данные начиная с этой позиции.Если mustbenew не равен
nil,write-regionзапрашивает подтверждение, если filename указывает на существующий файл. Если mustbenew — символexcl,write-regionне запрашивает подтверждение, а вместо этого сигнализирует об ошибкеfile-already-exists, если файл уже существует. Хотя обычноwrite-regionследует по символьной ссылке и создаёт файл, на который она указывает, если цель символьной ссылки отсутствует, при значенииexclаргумента mustbenew функция не следует по символьным ссылкам.Проверка существования файла при значении
exclаргумента mustbenew использует специальную системную возможность. По крайней мере для файлов на локальном диске исключена ситуация, когда другая программа создаст файл с тем же именем до того, как это сделает Emacs, и Emacs об этом не узнает.Если visit равен
t, Emacs устанавливает связь между буфером и файлом: после этого буфер посещает этот файл. Кроме того, функция устанавливает время последнего изменения файла для текущего буфера в значение времени изменения файла filename и помечает буфер как неизменённый. Эта возможность используется вsave-buffer, но вам, вероятно, не следует использовать её самостоятельно.Если visit — строка, она задаёт имя файла для посещения. Таким образом, можно записать данные в один файл (filename), а буфер указать как посещающий другой файл (visit). Аргумент visit используется в сообщении в области эха, а также для блокировки файла; значение visit сохраняется в
buffer-file-name. Эта возможность используется для реализацииfile-precious-flag; не используйте её самостоятельно, если только вы точно не знаете, что делаете.Необязательный аргумент lockname, если он не равен
nil, задаёт имя файла, используемое для блокировки и разблокировки; для этой цели оно заменяет значения filename и visit.Функция
write-regionпреобразует записываемые данные в соответствующие форматы файлов, заданные с помощьюbuffer-file-format, и также вызывает функции из спискаwrite-region-annotate-functions. См. раздел Преобразование форматов файлов.Обычно
write-regionвыводит в области эха сообщение «Записан filename». Это сообщение не выводится, если visit не равен ниt, ниnilи не является строкой, а также если Emacs работает в пакетном режиме (см. раздел Пакетный режим). Эта возможность полезна для программ, которые используют файлы для внутренних целей и о которых пользователю знать не нужно.
- Переменная: write-region-inhibit-fsync
Если значение этой переменной равно
nil,write-regionиспользует системный вызовfsyncпосле записи файла. Если значение равноt, Emacs не используетfsync. Значение по умолчанию —t. См. раздел Файлы и вторичное хранилище.
- Макрос: with-temp-file file body…
-
Макрос
with-temp-fileвычисляет формы body, используя временный буфер в качестве текущего; затем, в конце, записывает содержимое буфера в файл file. По завершении он удаляет временный буфер и восстанавливает буфер, который был текущим до формыwith-temp-file. Затем он возвращает значение последней формы в body.Текущий буфер восстанавливается даже в случае аварийного выхода через
throwили ошибки (см. раздел Нелокальные выходы).Как и
with-temp-buffer(см. раздел Текущий буфер), временный буфер, используемый этим макросом, не запускает хукиkill-buffer-hook,kill-buffer-query-functions(см. раздел Удаление буферов) иbuffer-list-update-hook(см. раздел Список буферов).
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/Writing-to-Files.html