Start · Sprachen · JavaScript · Referenz · FileSystem.name

FileSystem.name

Eigenschaft

Die schreibgeschützte Eigenschaft <code>name</code> eines <code>FileSystem</code>-Objekts gibt einen Namen zurück, der das Dateisystem eindeutig bezeichnet.

seit JavaScript Baseline: alle modernen Browser (File and Director Kategorie: webapi

Signatur

FileSystem.name

Beschreibung

Die Eigenschaft FileSystem.name gehört zur File and Directory Entries API. Sie liefert einen String, der das Dateisystem unter allen anderen vom Browser bereitgestellten Dateisystemen eindeutig kennzeichnet. Man kann sie nur lesen, Zuweisungen wirken sich nicht aus.

An ein FileSystem-Objekt kommt man in der Praxis fast immer über die Eigenschaft filesystem eines FileSystemEntry. Einen solchen Eintrag erhält man zum Beispiel beim Drag & Drop über DataTransferItem.webkitGetAsEntry() oder bei Datei-Eingabefeldern mit dem Attribut webkitdirectory über HTMLInputElement.webkitEntries.

Nützlich ist name vor allem zur Unterscheidung und Protokollierung. Damit lässt sich prüfen, ob zwei Einträge aus demselben Dateisystem stammen, etwa aus demselben Drop-Vorgang. Außerdem hilft der Name beim Debugging, wenn mehrere Dateisysteme im Spiel sind. Wie der String aufgebaut ist, bestimmt der Browser. Er hat keine festgelegte Semantik, man sollte ihn also nicht zerlegen und seinen Inhalt nicht auswerten.

Rückgabewert

Typ
string
Beschreibung
Ein String (USVString), der das Dateisystem eindeutig bezeichnet. Wie er aufgebaut ist, legt der Browser fest.

Beispiele

Namen des Dateisystems bei Drag & Drop auslesen

const dropZone = document.querySelector('#drop-zone');

dropZone.addEventListener('dragover', (event) => event.preventDefault());

dropZone.addEventListener('drop', (event) => {
  event.preventDefault();
  for (const item of event.dataTransfer.items) {
    const entry = item.webkitGetAsEntry();
    if (!entry) continue;
    // Jeder FileSystemEntry verweist auf sein FileSystem
    console.log(`${entry.name} stammt aus Dateisystem: ${entry.filesystem.name}`);
  }
});
bericht.pdf stammt aus Dateisystem: <vom Browser vergebener Name>

Prüfen, ob Einträge aus demselben Dateisystem stammen

// <input type="file" id="ordner" webkitdirectory multiple>
const input = document.querySelector('#ordner');

input.addEventListener('change', () => {
  const entries = input.webkitEntries ?? [];
  const namen = new Set(entries.map((entry) => entry.filesystem.name));

  console.log(`Anzahl Einträge: ${entries.length}`);
  console.log(`Verschiedene Dateisysteme: ${namen.size}`);
});
Anzahl Einträge: 1 Verschiedene Dateisysteme: 1

Name und Wurzelverzeichnis zu Debug-Zwecken ausgeben

const describeFileSystem = (entry) => {
  const { filesystem } = entry;
  return {
    name: filesystem.name,
    root: filesystem.root.fullPath
  };
};

document.addEventListener('drop', (event) => {
  event.preventDefault();
  const entry = event.dataTransfer.items[0]?.webkitGetAsEntry();
  if (entry) console.table(describeFileSystem(entry));
});
document.addEventListener('dragover', (event) => event.preventDefault());
┌─────────┬──────────────────────────────┐ │ name │ <vom Browser vergebener Name> │ │ root │ / │ └─────────┴──────────────────────────────┘

// Wichtig · Fallstricke

  • Kein fester Aufbau: Wie der Name aussieht, bestimmt der Browser, und er kann sich zwischen Browsern und Versionen unterscheiden. Nur vergleichen, nicht zerlegen oder auswerten.
  • Nicht dauerhaft: Ein Drop-Vorgang oder eine Dateiauswahl erzeugt oft ein eigenes, kurzlebiges Dateisystem. Der Name eignet sich deshalb nicht als dauerhafter Schlüssel, zum Beispiel im localStorage.
  • Kompatibilität: Der Zugriff über FileSystemEntry.filesystem funktioniert in Chrome, Edge, Firefox und Safari. Die veraltete, nur in Chromium verfügbare Methode window.webkitRequestFileSystem() sollte man nicht mehr verwenden.
  • Für neue Projekte mit Lese- und Schreibzugriff eignen sich die File System API (FileSystemHandle, showOpenFilePicker()) oder das Origin Private File System (navigator.storage.getDirectory()) besser. Beide haben mit dieser Schnittstelle nichts zu tun.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird ignoriert, im Strict Mode löst sie einen TypeError aus.