FileSystemDirectoryHandle

Baseline 2023

Newly available

Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Das FileSystemDirectoryHandle-Interface der File System API bietet einen Zugriff auf ein Dateisystemverzeichnis.

Auf das Interface kann über die Methoden window.showDirectoryPicker(), StorageManager.getDirectory(), DataTransferItem.getAsFileSystemHandle() und FileSystemDirectoryHandle.getDirectoryHandle() zugegriffen werden.

FileSystemHandle FileSystemDirectoryHandle

Instanzeigenschaften

Erbt Eigenschaften von seinem Elternteil, FileSystemHandle.

Instanzmethoden

Erbt Methoden von seinem Elternteil, FileSystemHandle.

Reguläre Methoden:

FileSystemDirectoryHandle.getDirectoryHandle()

Gibt ein Promise zurück, das mit einem FileSystemDirectoryHandle für ein Unterverzeichnis mit dem angegebenen Namen innerhalb des Verzeichnishandles erfüllt wird, auf dem die Methode aufgerufen wird.

FileSystemDirectoryHandle.getFileHandle()

Gibt ein Promise zurück, das mit einem FileSystemFileHandle für eine Datei mit dem angegebenen Namen innerhalb des Verzeichnisses erfüllt wird, auf dem die Methode aufgerufen wird.

FileSystemDirectoryHandle.removeEntry()

Versucht, einen Eintrag asynchron zu entfernen, wenn das Verzeichnishandle eine Datei oder ein Verzeichnis mit dem angegebenen Namen enthält.

FileSystemDirectoryHandle.resolve()

Gibt ein Promise zurück, das mit einem Array von Verzeichnisnamen vom übergeordneten Handle zum angegebenen Kindereintrag erfüllt wird, wobei der Name des Kindereintrags als letztes Array-Element erscheint.

Asynchrones Iterator Methoden:

FileSystemDirectoryHandle.entries()

Gibt einen neuen asynchronen Iterator eines gegebenen Objekts eigener enumerierbarer "key, value" Paare zurück.

FileSystemDirectoryHandle.keys()

Gibt einen neuen asynchronen Iterator zurück, der die Schlüssel für jedes Element in FileSystemDirectoryHandle enthält.

FileSystemDirectoryHandle.values()

Gibt einen neuen asynchronen Iterator zurück, der die Werte für jedes Element im FileSystemDirectoryHandle-Objekt enthält.

FileSystemDirectoryHandle[Symbol.asyncIterator]()

Gibt einen neuen asynchronen Iterator eines gegebenen Objekts eigener enumerierbarer "key, value" Paare zurück.

Beispiele

Verzeichnis-Handle zurückgeben

Das folgende Beispiel gibt ein Verzeichnis-Handle mit dem angegebenen Namen zurück; falls das Verzeichnis noch nicht existiert, wird es erstellt.

js
const dirName = "directoryToGetName";

// assuming we have a directory handle: 'currentDirHandle'
const subDir = currentDirHandle.getDirectoryHandle(dirName, { create: true });

Dateipfad zurückgeben

Die folgende asynchrone Funktion verwendet resolve(), um den Pfad zu einer ausgewählten Datei relativ zu einem angegebenen Verzeichnishandle zu finden.

js
async function returnPathDirectories(directoryHandle) {
  // Get a file handle by showing a file picker:
  const handle = await self.showOpenFilePicker();
  if (!handle) {
    // User cancelled, or otherwise failed to open a file.
    return;
  }

  // Check if handle exists inside our directory handle
  const relativePaths = await directoryHandle.resolve(handle);

  if (relativePath === null) {
    // Not inside directory handle
  } else {
    // relativePath is an array of names, giving the relative path

    for (const name of relativePaths) {
      // log each entry
      console.log(name);
    }
  }
}

Handles für alle Dateien in einem Verzeichnis zurückgeben

Das folgende Beispiel durchsucht ein Verzeichnis rekursiv, um FileSystemFileHandle-Objekte für jede Datei in diesem Verzeichnis zurückzugeben:

js
async function* getFilesRecursively(entry) {
  if (entry.kind === "file") {
    const file = await entry.getFile();
    if (file !== null) {
      file.relativePath = getRelativePath(entry);
      yield file;
    }
  } else if (entry.kind === "directory") {
    for await (const handle of entry.values()) {
      yield* getFilesRecursively(handle);
    }
  }
}
for await (const fileHandle of getFilesRecursively(directoryHandle)) {
  console.log(fileHandle);
}

Spezifikationen

Specification
File System Standard
# api-filesystemdirectoryhandle

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch