【问题标题】:Node.js read and write stream to the same file at the same timeNode.js同时读取和写入流到同一个文件
【发布时间】:2019-03-04 19:54:16
【问题描述】:

TL;DR

我正在浏览npmgithub 上的许多解决方案,寻找可以让我同时在两个不同位置将readwrite 访问同一文件的内容。到目前为止,我实际上很难找到这样的东西。是否有某种模块允许这样做?

背景

本质上我的要求是在一个大文件中我需要按以下顺序:

  • 阅读
  • 变换

理想的用法是这样的:

const fd = fs.open(file, "r+");
const read = createReadStreamSomehowFrom(fd);
const write = createWriteStreamSomehowFrom(fd);

read
   .pipe(new Transform(transform() {...}))
   .pipe(write);

我可以使用标准 fs.create[Read/Write]Stream 做到这一点,但无法控制两个流的流动,如果我的写入位置超出读取位置,那么我正在阅读我刚刚写的东西......

用例和perl -p -i -e一样,异步读写同一个文件(意思是同一个inode),替换内容而不把所有东西都加载到内存中。

我希望这是一个真实的用例,但我发现的所有实现实际上都是将整个文件加载到内存中然后保存。我在这里错过了一个已知的模块还是需要实际编写这样的东西?

【问题讨论】:

    标签: node.js file stream fs file-descriptor


    【解决方案1】:

    嗯……似乎很难。 :)

    所以在这里记录一下——我没有找到这样的模块,实际上我和一些负责一个很好的文件内替换模块的人讨论了这个问题。看到没有办法解决这个问题,我决定从头开始编写它,它是:

    该模块的工作原理很简单,即在可读流中消耗完字节之前不能写入任何字节,并且它在下面相当简单(一对fs.read/write ops 密切关注读取和写入点)。

    如果你觉得这很有用,那我很高兴。 :)

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2014-03-13
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多