You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Deno中file.read与file.write大小不匹配导致文件损坏问题

Deno 文件读写导致文件损坏的修复方案

你在Deno中实现文件复制时生成的目标文件损坏,核心问题是读写数据尺寸不匹配。

问题原因

你的代码里每次创建5MB的Uint8Array缓冲区,调用infh.read(buf)后,返回的bytesRead是实际读取到的字节数——当读到文件末尾时,这个数值会小于缓冲区总长度。但你直接把整个缓冲区写入目标文件,这会把缓冲区中未被数据填充的空白部分(默认值为0)也写入,导致目标文件比原文件多了冗余数据,最终损坏。

修复后的代码

let bytesRead: number | null = -1;
while(bytesRead !== null){
  const buf = new Uint8Array(5 * 1_000_000);
  bytesRead = await infh.read(buf)
  if(bytesRead !== null){
    // 仅写入实际读取到的字节部分
    await outfh.write(buf.subarray(0, bytesRead));
  }
}

说明

subarray(0, bytesRead)会创建一个指向原缓冲区前bytesRead个字节的视图,不会额外复制内存,效率很高,能保证写入的数据和读取到的完全一致,彻底避免文件损坏问题。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:22:32