FileSystemHandle: remove() 方法
注意:此功能在 Web Workers 中可用。
非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。
FileSystemHandle 接口的 remove() 方法请求从底层文件系统中移除由该句柄表示的条目。
remove() 方法允许您直接从句柄中删除文件或目录。如果没有此方法,您将不得不获取父目录的句柄,然后在该句柄上调用 FileSystemDirectoryHandle.removeEntry() 来删除它。
您还可以调用 Origin Private File System 的根目录上的 remove() 来清除其内容,之后会创建一个新的空 OPFS。
语法
remove()
remove(options)
参数
options可选-
一个指定移除选项的对象。可能的属性如下:
recursive可选-
一个布尔值,默认为
false。当设置为true且条目是目录时,其内容将被递归移除。
返回值
一个 Promise,成功时解析为 undefined。
异常
InvalidModificationErrorDOMException-
如果
recursive设置为false且要移除的条目是带有子项的目录,则会抛出此异常。 NoModificationAllowedErrorDOMException-
如果浏览器未能获取到条目的独占锁,则会抛出此异常。
NotAllowedErrorDOMException-
如果
PermissionStatus不是granted,则会抛出此异常。 NotFoundErrorDOMException-
如果找不到条目,则会抛出此异常。
示例
我们的 FileSystemHandle.remove() 演示(请参阅 源代码)是一个文件创建器应用程序。您可以在 <textarea> 中输入文本,然后按“保存文件” <button>,应用程序将打开一个文件选择器,允许您将该文本保存到您选择的文本文件中,存储在您的本地文件系统中。您也可以选择删除您创建的文件。
它不允许您查看创建文件的内容,并且在页面重新加载/关闭时不会与底层文件系统保持同步。这意味着如果您在重新加载或关闭选项卡之前不选择删除,应用程序创建的文件仍将存在于文件系统中。
文件选择器、文件句柄以及要创建的新文件本身,都是使用 window.showSaveFilePicker() 创建的。文本通过 FileSystemFileHandle.createWritable() 写入文件。
一旦在文件系统中创建了一个文件,就会在应用程序中创建一个条目(请参阅源代码中的 processNewFile())。
- 文件句柄的引用存储在一个名为
savedFileRefs的数组中,以便以后可以轻松引用。 - 在 UI 中“已保存文件”标题下方会添加一个列表项,其中显示文件名以及一个“删除”按钮。
当按下“删除”按钮时,将运行 deleteFile() 函数,其代码如下:
async function deleteFile(e) {
for (const handle of savedFileRefs) {
if (handle.name === `${e.target.id}.txt`) {
await handle.remove();
savedFileRefs = savedFileRefs.filter(
(handle) => handle.name !== `${e.target.id}.txt`,
);
e.target.parentElement.parentElement.removeChild(e.target.parentElement);
}
}
}
逐步讲解:
- 对于
savedFileRefs数组中保存的每个文件句柄,我们检查其名称是否与触发事件的按钮的id属性匹配。 - 找到匹配项后,我们就对该句柄运行
FileSystemHandle.remove(),将文件从底层文件系统中删除。 - 我们还将匹配的句柄从
savedFileRefs数组中删除。 - 最后,我们从 UI 中删除与该文件相关的列表项。
规范
此功能并非任何规范的一部分,但将来可能会成为标准。有关详细信息,请参阅 whatwg/fs#9。
浏览器兼容性
加载中…