FileSystemWritableFileStream:seek() 方法

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

安全上下文: 此项功能仅在一些支持的浏览器安全上下文(HTTPS)中可用。

备注: 此特性在 Web Worker 中可用。

FileSystemWritableFileStream 接口的 seek() 方法用于更新文件当前指针的偏移到指定的位置(以字节为单位)。

语法

js
seek(position)

参数

position

一个数字,表示从文件开头起的字节位置。

返回值

一个 Promise,会兑现 undefined

异常

NotAllowedError DOMException

如果 PermissionStatus.state 不为 granted,抛出此异常。

TypeError

如果 position 参数不是一个数字或者未定义,抛出此异常。

示例

下面的异步函数会打开“保存文件”选择器,选择器在有文件被选择后会返回一个 FileSystemFileHandle。由此,使用 FileSystemFileHandle.createWritable() 方法创建一个写入流。

然后我们按以下流程写入内容到流中:

  1. 向流中写入一个字符串。
  2. 使用 seek() 方法将指针放置到流的开头。
  3. 向流中写入第二个字符串,覆写第一次写入的。

随后将流关闭。

js
async function saveFile() {
  try {
    // 创建一个新句柄
    const newHandle = await window.showSaveFilePicker();

    // 创建一个 FileSystemWritableFileStream 用于写入
    const writableStream = await newHandle.createWritable();

    // 写入我们的文件
    await writableStream.write("My first file content");
    await writableStream.seek(0);
    await writableStream.write("My second file content");

    // 关闭文件并将内容写入磁盘
    await writableStream.close();
  } catch (err) {
    console.error(err.name, err.message);
  }
}

如果你运行了上面的函数,然后打开磁盘上被创建的文件,你应该会看到文本“My second file content”。

规范

Specification
File System Standard
# api-filesystemwritablefilestream-seek

浏览器兼容性

BCD tables only load in the browser

参见