Запись в файлы
Вы можете записать содержимое буфера или его части непосредственно в файл на диске, используя функции 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обычно следует за символической ссылкой и создаёт целевой файл, если символическая ссылка является висячей, она не следует за символическими ссылками, если mustbenew равноexcl.Проверка на существование файла, когда mustbenew равно
excl, использует специальную системную функцию. По крайней мере, для файлов на локальном диске нет возможности, чтобы другая программа создала файл с тем же именем до того, как это сделает Emacs, без того, чтобы Emacs об этом не узнал.Если visit равно
t, то Emacs устанавливает связь между буфером и файлом: буфер затем посещает этот файл. Он также устанавливает время последнего изменения файла для текущего буфера на modtime файла 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после записи файла. Хотя это замедляет Emacs, это снижает риск потери данных после отключения питания. Если значение равноt, Emacs не используетfsync. Значение по умолчанию равноnilпри интерактивной работе Emacs иtпри работе Emacs в пакетном режиме. См. Файлы и хранение.
- Макрос: 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-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Writing-to-Files.html