Spec-Zone.ru › Web APIs

FileSystemSyncAccessHandle: метод write()

Базовая версия 2023
Новое

С марта 2023 года эта функция работает на последних версиях устройств и браузеров. Возможны проблемы с её работой на более старых устройствах и браузерах.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.

Примечание: Эта функция доступна только в посвященных веб-воркерах.

Метод write() интерфейса FileSystemSyncAccessHandle записывает содержимое указанного буфера в файл, связанный с этим обработчиком, необязательно по заданному смещению.

Файлы в частной файловой системе происхождения не видны конечным пользователям и, следовательно, не подвергаются тем же проверкам безопасности, что и методы, работающие с файлами в файловой системе, видимой пользователю. В результате, записи, выполняемые с помощью FileSystemSyncAccessHandle.write() значительно более производительны. Это делает их подходящими для существенных и масштабных обновлений файлов, таких как изменения базы данных SQLite.

Синтаксис

write(buffer, options)

Параметры

buffer

An ArrayBuffer или ArrayBufferView (например, DataView), представляющий буфер, который будет записан в файл.

options Необязательный

Объект опций, содержащий следующие свойства:

at

Число, представляющее смещение в байтах от начала файла, в котором должен быть записан буфер.

Примечание: Нельзя напрямую манипулировать содержимым ArrayBuffer. Вместо этого создайте объект массива с типом, например, Int8Array или DataView, который представляет буфер в определенном формате, и используйте его для чтения и записи содержимого буфера.

Возвращаемое значение

Число, представляющее количество байтов, записанных в файл.

Исключения

InvalidStateError DOMException

Выбрасывается, если связанный обработчик доступа уже закрыт или если изменение двоичных данных файла полностью провалилось.

QuotaExceededError DOMException

Выбрасывается, если увеличенный объем данных превышает квоту браузера на хранилище.

TypeError

Выбрасывается, если файловая система по умолчанию не поддерживает запись файла по указанному смещению в файле.

Примеры

Следующая асинхронная функция-обработчик событий содержится внутри веб-воркера. При получении сообщения от основного потока она:

  • Создает синхронный обработчик доступа к файлу.
  • Получает размер файла и создает ArrayBuffer для его хранения.
  • Читает содержимое файла в буфер.
  • Кодирует сообщение и записывает его в конец файла.
  • Сохраняет изменения на диске и закрывает обработчик доступа.
onmessage = async (e) => {
  // Retrieve message sent to work from main script
  const message = e.data;

  // Get handle to draft file
  const root = await navigator.storage.getDirectory();
  const draftHandle = await root.getFileHandle("draft.txt", { create: true });
  // Get sync access handle
  const accessHandle = await draftHandle.createSyncAccessHandle();

  // Get size of the file.
  const fileSize = accessHandle.getSize();
  // Read file content to a buffer.
  const buffer = new DataView(new ArrayBuffer(fileSize));
  const readBuffer = accessHandle.read(buffer, { at: 0 });

  // Write the message to the end of the file.
  const encoder = new TextEncoder();
  const encodedMessage = encoder.encode(message);
  const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });

  // Persist changes to disk.
  accessHandle.flush();

  // Always close FileSystemSyncAccessHandle if done.
  accessHandle.close();
};

Примечание: В более ранних версиях спецификации close(), flush(), getSize() и truncate() были ошибочно указаны как асинхронные методы, и более старые версии некоторых браузеров реализуют их таким образом. Однако все современные браузеры, поддерживающие эти методы, реализуют их как синхронные методы.

Спецификации

Спецификация
Файловая система
# api-filesystemsyncaccesshandle-write

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
write 102 102 111 88 15.2 109 111 74 15.2 21.0 109

См. также

  • API файловой системы
  • API доступа к файловой системе: упрощение доступа к локальным файлам

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/FileSystemSyncAccessHandle/write

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API