FileSystemDirectoryHandle

基线 2023

新功能

2023 年 3 月起,此功能在最新的设备和浏览器版本中均可使用。此功能可能无法在旧设备或浏览器中使用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,在部分或所有支持的浏览器中可用。

注意: 此功能在Web Workers中可用。

FileSystemDirectoryHandle文件系统 API 的一个接口,它提供对文件系统目录的句柄。

可以通过window.showDirectoryPicker()StorageManager.getDirectory()DataTransferItem.getAsFileSystemHandle()FileSystemDirectoryHandle.getDirectoryHandle() 方法访问该接口。

FileSystemHandle FileSystemDirectoryHandle

实例属性

继承其父级FileSystemHandle 的属性。

实例方法

继承其父级FileSystemHandle 的方法。

常规方法

FileSystemDirectoryHandle.getDirectoryHandle()

返回一个以FileSystemDirectoryHandle 为结果的Promise,该结果对应于调用该方法的目录句柄中具有指定名称的子目录。

FileSystemDirectoryHandle.getFileHandle()

返回一个以FileSystemFileHandle 为结果的Promise,该结果对应于调用该方法的目录中具有指定名称的文件。

FileSystemDirectoryHandle.removeEntry()

尝试异步删除目录句柄中包含的具有指定名称的文件或目录。

FileSystemDirectoryHandle.resolve()

返回一个以Array 为结果的Promise,该结果包含从父句柄到指定子项的目录名称,子项名称作为最后一个数组项。

异步迭代器 方法

FileSystemDirectoryHandle.entries()

返回给定对象自身可枚举属性[key, value] 对的新异步迭代器

FileSystemDirectoryHandle.keys()

返回一个新的异步迭代器,其中包含FileSystemDirectoryHandle 中每个项的键。

FileSystemDirectoryHandle.values()

返回一个新的异步迭代器,其中包含FileSystemDirectoryHandle 对象中每个索引的值。

FileSystemDirectoryHandle[Symbol.asyncIterator]()

返回给定对象自身可枚举属性[key, value] 对的新异步迭代器

示例

返回目录句柄

以下示例返回具有指定名称的目录句柄;如果目录不存在,则创建它。

js
const dirName = "directoryToGetName";

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

返回文件路径

以下异步函数使用resolve() 查找相对于指定目录句柄的选定文件的路径。

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);
    }
  }
}

返回目录中所有文件的句柄

以下示例递归扫描目录,以返回该目录中每个文件的FileSystemFileHandle 对象。

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);
}

规范

规范
文件系统标准
# api-filesystemdirectoryhandle

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅