FileSystemWritableFileStream: truncate() 方法

基准线 2025
新推出

自 ⁨2025 年 9 月⁩起,此功能适用于最新设备和浏览器版本。此功能可能不适用于较旧的设备或浏览器。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

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

truncate() 方法是 FileSystemWritableFileStream 接口的一部分,它将与流关联的文件大小调整为指定的字节数。

如果指定的大小大于当前文件大小,则文件将用 0x00 字节进行填充。

调用 truncate() 时,文件指针也会更新。如果偏移量小于指定大小,则保持不变。如果偏移量大于指定大小,则将偏移量设置为该大小。这确保后续写入不会出错。

在流关闭之前,不会将任何更改写入磁盘上的实际文件。更改通常会写入临时文件。

语法

js
truncate(size)

参数

size

一个指定要将流调整到的字节数的数字。

返回值

一个返回 undefinedPromise

异常

NotAllowedError DOMException

如果 PermissionStatus.state 不是 granted,则会抛出此异常。

QuotaExceededError

如果文件的新大小大于文件的原始大小,并且超出了浏览器的 存储配额,则会抛出此错误。

TypeError

如果 size 不是数字或未定义,则会抛出此错误。

示例

以下异步函数打开“保存文件”选择器,一旦选择了文件,它会返回一个 FileSystemFileHandle。从中,使用 FileSystemFileHandle.createWritable() 方法创建可写流。

接下来,我们将内容写入流

  1. 将一个文本字符串写入流。
  2. 使用 truncate() 方法将文件大小调整为 8 字节。
  3. 将第二个文本字符串写入流的开头,覆盖第一个写入的内容。

然后关闭流。

js
async function saveFile() {
  try {
    // create a new handle
    const newHandle = await window.showSaveFilePicker();

    // create a FileSystemWritableFileStream to write to
    const writableStream = await newHandle.createWritable();

    // write our file
    await writableStream.write("This is my first file content");
    await writableStream.truncate(8);
    await writableStream.write("my second file content");

    // close the file and write the contents to disk.
    await writableStream.close();
  } catch (err) {
    console.error(err.name, err.message);
  }
}

如果运行上述函数,然后打开磁盘上创建的相应文件,您应该会看到文本“This is my second file content”。

规范

规范
文件系统
# api-filesystemwritablefilestream-truncate

浏览器兼容性

另见