FileSystemDirectoryHandle
注意:此功能在 Web Workers 中可用。
FileSystemDirectoryHandle 接口是 文件系统 API 的一部分,它提供了对文件系统目录的句柄。
该接口可以通过 window.showDirectoryPicker()、StorageManager.getDirectory()、DataTransferItem.getAsFileSystemHandle() 和 FileSystemDirectoryHandle.getDirectoryHandle() 方法访问。
实例属性
继承其父级 FileSystemHandle 的属性。
实例方法
继承其父级 FileSystemHandle 的方法。
常规方法
FileSystemDirectoryHandle.getDirectoryHandle()-
返回一个
Promise,该Promise会被一个FileSystemDirectoryHandle兑现,该FileSystemDirectoryHandle代表在调用该方法的目录句柄内具有指定名称的子目录。 FileSystemDirectoryHandle.getFileHandle()-
返回一个
Promise,该Promise会被一个FileSystemFileHandle兑现,该FileSystemFileHandle代表在调用该方法的目录内具有指定名称的文件。 FileSystemDirectoryHandle.removeEntry()-
如果目录句柄包含名为指定名称的文件或目录,则尝试异步删除该条目。
FileSystemDirectoryHandle.resolve()-
返回一个
Promise,该Promise会被一个Array兑现,该数组包含从父句柄到指定子条目的目录名称,其中子条目的名称是最后一个数组项。
异步迭代器方法
FileSystemDirectoryHandle.entries()-
返回给定对象自身可枚举属性的 `[key, value]` 对的新的异步迭代器。
FileSystemDirectoryHandle.keys()-
返回一个包含
FileSystemDirectoryHandle中每个条目键的新异步迭代器。 FileSystemDirectoryHandle.values()-
返回一个包含
FileSystemDirectoryHandle对象中每个索引值的新的异步迭代器。 FileSystemDirectoryHandle[Symbol.asyncIterator]()-
返回给定对象自身可枚举属性的 `[key, value]` 对的新的异步迭代器。
示例
返回目录句柄
以下示例返回一个具有指定名称的目录句柄;如果目录不存在,则会创建它。
const dirName = "directoryToGetName";
// assuming we have a directory handle: 'currentDirHandle'
const subDir = await currentDirHandle.getDirectoryHandle(dirName, {
create: true,
});
返回文件路径
以下异步函数使用 resolve() 方法查找相对于指定目录句柄的选定文件的路径。
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 对象。
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 |
浏览器兼容性
加载中…