Signatur
Beschreibung
Die Methode removeRecursively() eines FileSystemDirectoryEntry-Objekts löscht das Verzeichnis selbst und alles, was darin liegt. Dazu geht sie den gesamten Unterbaum durch und entfernt zuerst die Dateien und Unterverzeichnisse und am Ende das Verzeichnis selbst. Anders als FileSystemEntry.remove() muss das Verzeichnis dafür nicht leer sein.
Die Methode gehört zur älteren, callback-basierten File-and-Directory-Entries-API. Einträge daraus bekommst du meist über das veraltete window.webkitRequestFileSystem() (ein sandboxed, origin-gebundenes Dateisystem). Wenn das Löschen klappt, wird successCallback ohne Argumente aufgerufen. Bei einem Fehler bekommt errorCallback ein DOMException- bzw. FileError-Objekt.
Der Vorgang ist nicht atomar: Schlägt er mittendrin fehl, kann ein Teil der Inhalte schon gelöscht sein. Das Wurzelverzeichnis des Dateisystems lässt sich nicht löschen. In neuen Projekten solltest du stattdessen das Origin Private File System (OPFS) mit FileSystemDirectoryHandle.removeEntry(name, { recursive: true }) oder FileSystemHandle.remove({ recursive: true }) verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $successCallback | Function | Wird ohne Argumente aufgerufen, wenn das Verzeichnis samt Inhalt vollständig gelöscht ist. | |
| $errorCallback | Function | Wird bei einem Fehler mit einem DOMException-/FileError-Objekt aufgerufen, z. B. NotFoundError, SecurityError oder InvalidModificationError (etwa beim Versuch, das Wurzelverzeichnis zu löschen). |
Rückgabewert
Beispiele
Cache-Verzeichnis im sandboxed Dateisystem löschen
// Nur in Chromium-Browsern mit webkitRequestFileSystem
window.webkitRequestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, (fs) => {
fs.root.getDirectory('cache', { create: true }, (dirEntry) => {
dirEntry.removeRecursively(
() => console.log('Verzeichnis "cache" samt Inhalt gelöscht'),
(err) => console.error('Löschen fehlgeschlagen:', err.name)
);
}, (err) => console.error('getDirectory-Fehler:', err.name));
});
Callback-API in ein Promise einpacken
const removeDir = (dirEntry) =>
new Promise((resolve, reject) => {
dirEntry.removeRecursively(resolve, reject);
});
const getDir = (root, path) =>
new Promise((resolve, reject) => {
root.getDirectory(path, {}, resolve, reject);
});
window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024, async (fs) => {
try {
const dir = await getDir(fs.root, 'uploads/alt');
await removeDir(dir);
console.log(`${dir.fullPath} entfernt`);
} catch (err) {
console.warn('Nicht gelöscht:', err.name);
}
});
Moderne Alternative: rekursiv löschen im OPFS
// Origin Private File System – in allen aktuellen Browsern verfügbar
const clearCache = async () => {
const root = await navigator.storage.getDirectory();
const cache = await root.getDirectoryHandle('cache', { create: true });
const file = await cache.getFileHandle('daten.json', { create: true });
console.log('Angelegt:', file.name);
// Entspricht removeRecursively()
await root.removeEntry('cache', { recursive: true });
console.log('Cache gelöscht');
};
clearCache().catch(console.error);
// Wichtig · Fallstricke
- Veraltet und nicht standardisiert: Die Methode ist nicht Teil der aktuellen Spezifikation und funktioniert nur in Chromium-Browsern zusammen mit
webkitRequestFileSystem(). Firefox und Safari stellenFileSystemDirectoryEntrynur schreibgeschützt bereit (z. B. über Drag and Drop oderwebkitGetAsEntry()). Dort gibt es die Methode nicht, oder sie schlägt fehl. - Kann nicht rückgängig gemacht werden und ist nicht atomar: Gelöschte Inhalte sind endgültig weg. Tritt mittendrin ein Fehler auf, bleibt ein teilweise gelöschter Baum zurück.
- Das Wurzelverzeichnis (
fs.root) lässt sich nicht löschen. Der Versuch löst einen Fehler aus. - Wenn du keinen
errorCallbackübergibst, gehen Fehler unbemerkt verloren. Übergib ihn deshalb immer. - Prüfe vor der Nutzung, ob die Funktion vorhanden ist:
typeof dirEntry.removeRecursively === 'function'. Für neuen Code nimm das OPFS mitremoveEntry(name, { recursive: true }).