FileSystemHandle: remove() 方法
注意: 此功能在Web Workers 中可用。
非标准: 此功能是非标准的,不在标准轨道上。不要在面向网络的生产站点上使用它:它不会适用于每个用户。实现之间也可能存在较大的不兼容性,并且行为将来可能会改变。
remove()
方法是FileSystemHandle
接口的方法,用于请求从底层文件系统中删除该句柄所表示的条目。
remove()
方法允许您直接从句柄中删除文件或目录。如果没有此方法,您将需要获取父目录的句柄,然后对该句柄调用FileSystemDirectoryHandle.removeEntry()
来删除它。
您还可以对Origin Private File System 的根目录调用 remove()
来清除其内容,之后将创建一个新的空 OPFS。
语法
remove()
remove(options)
参数
返回值
一个Promise
,它将以 undefined
的值来完成。
异常
InvalidModificationError
DOMException
-
如果
recursive
设置为false
并且要删除的条目是一个包含子项的目录,则会抛出此异常。 NoModificationAllowedError
DOMException
-
如果浏览器无法获取对条目的独占锁,则会抛出此异常。
NotAllowedError
DOMException
-
如果
PermissionStatus
不是granted
,则会抛出此异常。 NotFoundError
DOMException
-
如果找不到条目,则会抛出此异常。
示例
我们的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。
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。