在node.js中删除文件的部分内容

3

目前,我正在尝试删除基本上是专有归档格式的一部分;为了支持删除文件的能力,我正在尝试弄清楚如何删除文件的一部分(给定偏移量和长度)。我看到在node的fs模块中有很多附加逻辑,但似乎没有什么可以“拼接”文件部分的东西。

这种操作可能吗?我是否必须采用不太理想的选项,将其写入全新的文件中?


2
什么是格式?文件是文本还是二进制?你如何知道在哪里分割?为什么你不想写到一个新文件中呢? - zero298
这是SBAsset6 - 格式主要是二进制的。文件本身有一个元表,其中包含了一个类似于虚拟文件路径的映射、偏移量(以字节为单位)和长度(以字节为单位)。我正在尝试处理从归档中删除内容的情况(无论是“文件路径”的更新导致字节的净变化为负,还是文件被删除),并且不留下浪费的字节。我还试图避免创建新文件,以减少I/O的数量 - 大多数归档文件很小,但我已经遇到过一些高达250MB + 的文件。 - damianb
1个回答

3

操作系统处理文件追加非常快,当您打开文件进行追加时,无需重新写入整个文件。

但是,如果您想要切割文件的中间部分,则无论使用哪种编程语言,都必须读取整个文件并重新保存。

您可以创建一个新文件,并将输入缓冲区的两个切片保存到其中。

var fs=require('fs')

var buffer=fs.readFileSync('input_file')

fs.writeFileSync("output",buffer.slice(0,20))
fs.appendFileSync("output",buffer.slice(50,100))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接