Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

DirectoryReaderSync

Deprecated

Avoid using this feature in new projects. This feature may be a candidate for removal from web standards or browsers.

Nicht standardisiert: Diese Funktion ist nicht standardisiert. Wir raten davon ab, nicht-standardisierte Funktionen auf produktiven Webseiten zu verwenden, da sie nur von bestimmten Browsern unterstützt werden und sich in Zukunft ändern oder entfernt werden können. Unter Umständen kann sie jedoch eine geeignete Option sein, wenn es keine standardisierte Alternative gibt.

Mit der Schnittstelle DirectoryReaderSync können Sie die Einträge eines Verzeichnisses lesen.

Warnung: Diese Schnittstelle ist veraltet und wird nicht mehr als Standard weiterentwickelt. Verwenden Sie sie nicht mehr. Verwenden Sie stattdessen die File and Directory Entries API.

Instanzmethoden

readEntries()

Gibt eine Liste der Einträge eines bestimmten Verzeichnisses zurück. Rufen Sie diese Methode auf, bis ein leeres Array zurückgegeben wird.

Syntax

js
readEntries()
Parameter

Keine.

Rückgabewert

Ein Array mit FileEntrySync- und DirectoryEntrySync-Einträgen.

Ausnahmen

Diese Methode kann eine DOMException mit einem der folgenden Codes auslösen:

Ausnahme Beschreibung
NOT_FOUND_ERR Das Verzeichnis existiert nicht.
INVALID_STATE_ERR Das Verzeichnis wurde verändert, nachdem der erste Aufruf von readEntries verarbeitet wurde.
SECURITY_ERR Der Browser hat festgestellt, dass das Abrufen der Metadaten nicht sicher ist.

Beschreibung

Bevor Sie die einzige Methode dieser Schnittstelle, readEntries(), aufrufen, erstellen Sie ein DirectoryEntrySync-Objekt. DirectoryEntrySync kann jedoch ebenso wie FileEntrySync nicht als Datentyp zwischen der aufrufenden Anwendung und einem Web-Worker-Thread übergeben werden. Das ist kein großes Problem: Die Hauptanwendung und der Worker-Thread müssen nicht dasselbe JavaScript-Objekt verwenden, sondern lediglich auf dieselben Dateien zugreifen können. Dazu können Sie statt einer Liste von Einträgen eine Liste von filesystem:-URLs übergeben, bei denen es sich lediglich um Strings handelt. Sie können die filesystem:-URL auch verwenden, um den Eintrag mit resolveLocalFileSystemURL() zu ermitteln. So erhalten Sie wieder ein DirectoryEntrySync- beziehungsweise FileEntrySync-Objekt.

Beispiele

Im folgenden Codeausschnitt aus HTML5Rocks (web.dev) erstellen wir Web Worker und übergeben Daten von dort an die Hauptanwendung.

js
// Taking care of the browser-specific prefixes.
window.resolveLocalFileSystemURL =
  window.resolveLocalFileSystemURL || window.webkitResolveLocalFileSystemURL;

// Create web workers
const worker = new Worker("worker.js");
worker.onmessage = (e) => {
  const urls = e.data.entries;
  urls.forEach((url) => {
    window.resolveLocalFileSystemURL(url, (fileEntry) => {
      // Print out file's name.
      console.log(fileEntry.name);
    });
  });
};

worker.postMessage({ cmd: "list" });

Der folgende worker.js-Code ruft den Inhalt des Verzeichnisses ab.

js
// worker.js

// Taking care of the browser-specific prefixes.
self.requestFileSystemSync =
  self.webkitRequestFileSystemSync || self.requestFileSystemSync;

// Global for holding the list of entry file system URLs.
const paths = [];

function getAllEntries(dirReader) {
  const entries = dirReader.readEntries();

  for (const entry of entries) {
    // Stash this entry's filesystem in URL
    paths.push(entry.toURL());

    // If this is a directory, traverse.
    if (entry.isDirectory) {
      getAllEntries(entry.createReader());
    }
  }
}

// Forward the error to main app.
function onError(e) {
  postMessage(`ERROR: ${e.toString()}`);
}

self.onmessage = (e) => {
  const cmd = e.data.cmd;

  // Ignore everything else except our 'list' command.
  if (!cmd || cmd !== "list") {
    return;
  }

  try {
    const fs = requestFileSystemSync(TEMPORARY, 1024 * 1024 /* 1MB */);

    getAllEntries(fs.root.createReader());

    self.postMessage({ entries: paths });
  } catch (e) {
    onError(e);
  }
};

Spezifikationen

Diese Funktion ist nicht mehr Teil einer Spezifikation. Es ist nicht mehr vorgesehen, sie zu einem Standard zu machen.

Browser-Kompatibilität

Siehe auch