Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

FileSystemSyncAccessHandle: write()-Methode

Baseline 2023
Newly available

Since ⁨March 2023⁩, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Diese Funktion ist nur in Dedicated Web Workers verfügbar.

Die write()-Methode des FileSystemSyncAccessHandle-Interfaces schreibt den Inhalt eines angegebenen Puffers in die Datei, die mit dem Handle verbunden ist, optional an einer bestimmten Position.

Dateien im ursprungsbezogenen privaten Dateisystem sind für Endnutzer nicht sichtbar, daher unterliegen sie nicht denselben Sicherheitsüberprüfungen wie Methoden, die auf Dateien im für den Benutzer sichtbaren Dateisystem ausgeführt werden. Aus diesem Grund sind Schreibvorgänge mit FileSystemSyncAccessHandle.write() weitaus performanter. Dies macht sie geeignet für bedeutende, groß angelegte Dateiaktualisierungen wie Änderungen an SQLite-Datenbanken.

Syntax

js
write(buffer, options)

Parameter

buffer

Ein ArrayBuffer oder ArrayBufferView (wie z.B. ein DataView), das den Puffer darstellt, der in die Datei geschrieben werden soll.

options Optional

Ein options-Objekt, das die folgenden Eigenschaften enthält:

at

Eine Zahl, die den Versatz in Bytes vom Anfang der Datei angibt, an dem der Puffer geschrieben werden soll.

Hinweis: Sie können den Inhalt eines ArrayBuffer nicht direkt manipulieren. Stattdessen erstellen Sie ein typisiertes Array-Objekt wie ein Int8Array oder ein DataView-Objekt, das den Puffer in einem bestimmten Format darstellt, und verwenden dieses, um den Inhalt des Puffers zu lesen und zu schreiben.

Rückgabewert

Eine Zahl, die die Anzahl der Bytes darstellt, die in die Datei geschrieben wurden.

Ausnahmen

InvalidStateError DOMException

Wird ausgelöst, wenn das zugehörige Zugriffs-Handle bereits geschlossen ist oder wenn die Änderung der binären Daten der Datei vollständig fehlschlägt.

QuotaExceededError

Wird ausgelöst, wenn die erhöhte Datenkapazität das Speicherquotum des Browsers überschreitet.

TypeError

Wird ausgelöst, wenn das zugrunde liegende Dateisystem das Schreiben der Datei vom angegebenen Dateiversatz nicht unterstützt.

Beispiele

Die folgende asynchrone Event-Handler-Funktion ist in einem Web-Worker enthalten. Beim Empfang einer Nachricht vom Haupt-Thread führt sie folgendes aus:

  • Erstellt ein synchrones Datei-Zugriffs-Handle.
  • Ruft die Dateigröße ab und erstellt einen ArrayBuffer, um sie aufzunehmen.
  • Liest den Dateiinhalt in den Puffer.
  • Kodiert die Nachricht und schreibt sie ans Ende der Datei.
  • Speichert die Änderungen auf der Festplatte und schließt das Zugriffs-Handle.
js
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();
};

Hinweis: In früheren Versionen der Spezifikation wurden close(), flush(), getSize() und truncate() fälschlicherweise als asynchrone Methoden spezifiziert, und ältere Versionen einiger Browser implementieren sie auf diese Weise. Alle aktuellen Browser, die diese Methoden unterstützen, implementieren sie jedoch als synchrone Methoden.

Spezifikationen

Specification
File System
# api-filesystemsyncaccesshandle-write

Browser-Kompatibilität

Siehe auch