Node.js同时读取流并将其写入同一文件

时间:2018-09-28 19:38:20

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

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),并替换内容而不将所有内容加载到内存中。

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

1 个答案:

答案 0 :(得分:1)

嗯...看来很难。 :)

因此,这里有记录-我没有找到这样的模块,并实际上与负责一个很好的文件内替换模块的一些人讨论了此模块。看不到解决方法,我决定从头开始编写,这里是:

该模块的工作原理很简单:在可读流中将其消耗掉之前,无法写入任何字节,而且其底层也非常简单(耦合fs.read/write操作,着眼于读写点)。

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