FileSystemSyncAccessHandle: flush()-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: Dieses Feature ist nur verfügbar in Dedicated Web Workers.

Die flush()-Methode der FileSystemSyncAccessHandle-Schnittstelle speichert alle Änderungen, die über die write()-Methode an der mit dem Handle verknüpften Datei vorgenommen wurden, auf der Festplatte.

Bitte beachten Sie, dass Sie diese Methode nur aufrufen müssen, wenn Sie die Änderungen zu einem bestimmten Zeitpunkt auf der Festplatte speichern müssen. Andernfalls können Sie das zugrundeliegende Betriebssystem dies automatisch erledigen lassen, was in den meisten Fällen ausreichend sein sollte.

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

Syntax

js
flush()

Parameter

Keine.

Rückgabewert

Keine (undefined).

Ausnahmen

InvalidStateError DOMException

Wird ausgelöst, wenn das zugehörige Zugriffs-Handle bereits geschlossen ist.

Beispiele

Die folgende asynchrone Ereignis-Handler-Funktion ist in einem Web Worker enthalten. Beim Empfang einer Nachricht vom Haupt-Thread wird:

  • Ein synchroner Datei-Zugriffs-Handle erstellt.
  • Die Größe der Datei ermittelt und ein ArrayBuffer erstellt, um sie aufzunehmen.
  • Der Dateiinhalt in den Puffer gelesen.
  • Die Nachricht kodiert und am Ende der Datei geschrieben.
  • Die Änderungen auf der Festplatte gespeichert und das Zugriffs-Handle geschlossen.
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();
};

Spezifikationen

Specification
File System Standard
# api-filesystemsyncaccesshandle-flush

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch