【问题标题】:Removing part of a file in node.js在 node.js 中删除文件的一部分
【发布时间】:2017-09-18 18:06:29
【问题描述】:

目前,我正在考虑尝试删除部分基本上属于专有存档格式的文件;为了支持删除文件的能力,我试图弄清楚如何删除文件的一部分(给定偏移量和长度)。我看到节点的 fs 模块有很多附加逻辑,但似乎没有“拼接”文件的部分。

这可能吗?我是否必须求助于不太受欢迎的选项,即写入一个全新的文件?

【问题讨论】:

  • 格式是什么?文件是文本文件还是二进制文件?你怎么知道在哪里分裂?你为什么不想写一个新文件呢?
  • 它是 SBAsset6 - 格式主要是二进制。文件本身有一个元表,其中包含相当于虚拟文件路径、偏移量(以字节为单位)和长度(以字节为单位)的映射。我正在尝试处理从存档中删除内容(对“文件路径”的更新导致字节的负净变化,或者文件被删除)并且不会留下浪费的字节。我还试图避免创建新文件以减少正在进行的 I/O 量 - 大多数档案都很小,但我遇到了一些高达 250MB+ 的文件。

标签: javascript node.js file


【解决方案1】:

操作系统处理追加文件的速度非常快,打开追加文件时无需重写所有文件。

但是,如果你想对文件的中间进行切片(剪切),无论你使用哪种编程语言,你都必须读取整个文件并再次保存。

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

var fs=require('fs')

var buffer=fs.readFileSync('input_file')

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

【讨论】:

    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 2014-01-14
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2011-07-15
    相关资源
    最近更新 更多