Start · Sprachen · JavaScript · Referenz · FileSystemDirectoryEntry.removeRecursively()

FileSystemDirectoryEntry.removeRecursively()

Methode

Löscht ein Verzeichnis samt allen enthaltenen Dateien und Unterverzeichnissen aus einem sandboxed Dateisystem. Das Ergebnis wird über Callbacks gemeldet.

seit JavaScript Nicht standardisiert, veraltet – nur Chromium-Brow deprecated seit ja Kategorie: webapi

Signatur

FileSystemDirectoryEntry.prototype.removeRecursively(successCallback, errorCallback)

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

Typ
void
Beschreibung
Kein Rückgabewert. Das Ergebnis kommt ausschließlich über die Callbacks.

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));
});
Verzeichnis "cache" samt Inhalt gelöscht

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);
  }
});
/uploads/alt entfernt

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);
Angelegt: daten.json Cache gelöscht

// 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 stellen FileSystemDirectoryEntry nur schreibgeschützt bereit (z. B. über Drag and Drop oder webkitGetAsEntry()). 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 mit removeEntry(name, { recursive: true }).