FileSystemSyncAccessHandle: getSize() 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 getSize()-Methode der FileSystemSyncAccessHandle-Schnittstelle gibt die Größe der mit dem Handle verbundenen Datei in Bytes zurück.

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

Syntax

js
getSize()

Parameter

Keine.

Rückgabewert

Eine Zahl, die die Größe der Datei in Bytes darstellt.

Ausnahmen

InvalidStateError DOMException

Wird ausgelöst, wenn das zugehörige Zugriffshandle bereits geschlossen ist.

Beispiele

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

  • Ein synchrones Datei-Zugriffshandle erstellt.
  • Die Größe der Datei ermittelt und ein ArrayBuffer erstellt, der sie enthält.
  • Der Dateiinhalte in den Puffer gelesen.
  • Die Nachricht codiert und ans Ende der Datei geschrieben.
  • Die Änderungen auf die Festplatte übermittelt und das Zugriffshandle 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-getsize

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch