Signatur
Beschreibung
Mit remove() wird der Eintrag, auf den ein FileSystemEntry (also ein FileSystemFileEntry oder FileSystemDirectoryEntry) zeigt, dauerhaft aus dem Dateisystem entfernt. Die Methode arbeitet asynchron und im Callback-Stil: Bei Erfolg wird successCallback ohne Argumente aufgerufen, im Fehlerfall errorCallback mit einem DOMException- bzw. FileError-Objekt.
Relevant ist die Methode fast nur für das ältere, sandboxed File System API von Chrome, das über window.webkitRequestFileSystem() einen privaten, ursprungsgebundenen Speicherbereich bereitstellt. Einträge, die man über Drag & Drop (DataTransferItem.webkitGetAsEntry()) oder <input type="file" webkitdirectory> bekommt, sind schreibgeschützt. remove() schlägt dort fehl – die Dateien des Nutzers lassen sich damit also nicht löschen.
Verzeichnisse lassen sich mit remove() nur löschen, wenn sie leer sind. Für das rekursive Löschen eines ganzen Verzeichnisbaums gibt es FileSystemDirectoryEntry.removeRecursively(). Auch das Wurzelverzeichnis des Dateisystems kann nicht entfernt werden.
Für neue Projekte solltest du stattdessen das File System Access API bzw. das Origin Private File System (OPFS) nutzen. Dort funktioniert das Löschen mit Promises über FileSystemDirectoryHandle.removeEntry() oder FileSystemHandle.remove().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $successCallback Pflicht | function(): void | Wird aufgerufen, sobald der Eintrag erfolgreich gelöscht wurde. Erhält keine Argumente. | |
| $errorCallback | function(error: DOMException | FileError): void | Wird bei einem Fehler aufgerufen, z. B. mit InvalidModificationError (Verzeichnis nicht leer oder Wurzelverzeichnis), NotFoundError (Eintrag existiert nicht mehr) oder SecurityError bzw. NoModificationAllowedError (schreibgeschützter Eintrag). |
Rückgabewert
successCallback bzw. errorCallback.Beispiele
Temporäre Datei im Sandbox-Dateisystem löschen
// Nur in Chromium-Browsern verfügbar
const requestFS = window.requestFileSystem || window.webkitRequestFileSystem;
requestFS(window.TEMPORARY, 5 * 1024 * 1024, (fs) => {
fs.root.getFile('cache/log.txt', { create: false }, (fileEntry) => {
fileEntry.remove(
() => console.log(`Gelöscht: ${fileEntry.fullPath}`),
(err) => console.error('Löschen fehlgeschlagen:', err.name)
);
}, (err) => console.warn('Datei nicht gefunden:', err.name));
});
remove() als Promise für async/await kapseln
const removeEntry = (entry) =>
new Promise((resolve, reject) => entry.remove(resolve, reject));
const getDir = (root, path) =>
new Promise((resolve, reject) =>
root.getDirectory(path, { create: false }, resolve, reject));
const cleanup = async (fs) => {
try {
const dir = await getDir(fs.root, 'uploads');
await removeEntry(dir); // klappt nur bei leerem Verzeichnis
console.log('Verzeichnis entfernt');
} catch (err) {
if (err.name === 'InvalidModificationError') {
console.warn('Verzeichnis ist nicht leer – removeRecursively() verwenden');
} else {
console.error(err);
}
}
};
window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024, cleanup);
Moderne Alternative: Datei im Origin Private File System löschen
const deleteFromOPFS = async (name) => {
const root = await navigator.storage.getDirectory();
try {
await root.removeEntry(name); // für Ordner: { recursive: true }
console.log(`${name} gelöscht`);
} catch (err) {
console.error(`Fehler (${err.name})`);
}
};
await deleteFromOPFS('entwurf.json');
// Wichtig · Fallstricke
- Nicht standardisiert und veraltet:
remove()gehört zum File and Directory Entries API bzw. zum alten sandboxed File System API. Funktionsfähig ist es praktisch nur in Chromium-Browsern mitwebkitRequestFileSystem(). Firefox und Safari kennen zwarFileSystemEntryfür Drag & Drop, aber dort ist alles schreibgeschützt. - Nur leere Verzeichnisse: Bei einem Verzeichnis mit Inhalt kommt ein
InvalidModificationError. Für ganze Verzeichnisbäume gibt esremoveRecursively(). - Das Wurzelverzeichnis (
fs.root) lässt sich nicht löschen. - Nach dem Löschen bleibt das
FileSystemEntry-Objekt bestehen, verweist aber ins Leere. Weitere Aufrufe wiegetMetadata()oderfile()scheitern mitNotFoundError. - Wenn du kein
errorCallbackangibst, bleiben Fehler unbemerkt. Übergib deshalb immer eines. - Für neuen Code solltest du
FileSystemDirectoryHandle.removeEntry()bzw.FileSystemHandle.remove()(OPFS / File System Access API) verwenden. Diese Methoden arbeiten mit Promises.