FileSystemSyncAccessHandle: close() 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 close()-Methode der FileSystemSyncAccessHandle-Schnittstelle schließt einen geöffneten synchronen Datei-Handle, deaktiviert jegliche weiteren Operationen darauf und gibt die exklusive Sperre frei, die zuvor auf die mit dem Datei-Handle verbundene Datei gelegt wurde.

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. Allerdings implementieren alle aktuellen Browser, die diese Methoden unterstützen, sie als synchrone Methoden.

Syntax

js
close()

Parameter

Keine.

Rückgabewert

Keiner (undefined).

Ausnahmen

Keine.

Beispiele

Die folgende asynchrone Ereignis-Handler-Funktion wird in einem Web Worker ausgeführt. Beim Empfang einer Nachricht vom Hauptthread:

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

Spezifikationen

Specification
File System Standard
# api-filesystemsyncaccesshandle-close

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch