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: Dieses Feature ist nur verfügbar in Dedicated Web Workers.
Die write()
Methode der FileSystemSyncAccessHandle
-Schnittstelle schreibt den Inhalt eines angegebenen Puffers in die Datei, die mit dem Handle verknüpft ist, optional an einem gegebenen Offset.
Dateien innerhalb des origin privaten Dateisystems sind für Endbenutzer nicht sichtbar und unterliegen daher nicht denselben Sicherheitsprüfungen wie Methoden, die auf Dateien im benutzersichtbaren Dateisystem ausgeführt werden. Als Ergebnis sind Schreiboperationen, die mit FileSystemSyncAccessHandle.write()
durchgeführt werden, viel leistungsfähiger. Dies macht sie geeignet für bedeutende, großangelegte Dateiaktualisierungen wie SQLite-Datenbankmodifikationen.
Syntax
write(buffer, options)
Parameter
buffer
-
Ein
ArrayBuffer
oderArrayBufferView
(wie einDataView
), der den Puffer darstellt, der in die Datei geschrieben werden soll. options
Optional-
Ein Optionsobjekt mit folgenden Eigenschaften:
at
-
Eine Zahl, die den Offset in Bytes ab dem Anfang der Datei darstellt, 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 in die Datei geschriebenen Bytes darstellt.
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
DOMException
-
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 Dateioffset aus nicht unterstützt.
Beispiele
Die folgende asynchrone Ereignishandlerfunktion ist innerhalb eines Web Workers enthalten. Beim Empfang einer Nachricht vom Haupt-Thread wird sie:
- Ein synchrones Datei-Zugriffs-Handle erstellt.
- Die Größe der Datei abruft und einen
ArrayBuffer
erstellt, um sie zu enthalten. - Den Dateiinhalte in den Puffer liest.
- Die Nachricht codiert und ans Ende der Datei schreibt.
- Die Änderungen auf der Festplatte speichert und das Zugriffs-Handle schließt.
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. Allerdings implementieren alle aktuellen Browser, die diese Methoden unterstützen, sie als synchrone Methoden.
Spezifikationen
Specification |
---|
File System Standard # api-filesystemsyncaccesshandle-write |
Browser-Kompatibilität
BCD tables only load in the browser