Start · Sprachen · JavaScript · Referenz · FileSystemEntry.remove()

FileSystemEntry.remove()

Methode

Löscht die Datei oder das (leere) Verzeichnis, für das der <code>FileSystemEntry</code> steht, aus dem Dateisystem und meldet das Ergebnis über Callbacks.

seit JavaScript Nicht standardisiert – nur Chromium-basierte Brows deprecated seit ja Kategorie: webapi

Signatur

FileSystemEntry.prototype.remove(successCallback, errorCallback)

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

Typ
void
Beschreibung
Kein Rückgabewert. Das Ergebnis kommt ausschließlich über 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));
});
Gelöscht: /cache/log.txt

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);
Verzeichnis ist nicht leer – removeRecursively() verwenden

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');
entwurf.json gelöscht

// 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 mit webkitRequestFileSystem(). Firefox und Safari kennen zwar FileSystemEntry fü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 es removeRecursively().
  • 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 wie getMetadata() oder file() scheitern mit NotFoundError.
  • Wenn du kein errorCallback angibst, 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.