首页 > 解决方案 > Node.js同时读取和写入流到同一个文件

问题描述

TL;博士

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

背景

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

理想情况下,用法如下:

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.jsfilestreamfsfile-descriptor

解决方案


嗯……似乎很难。:)

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

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

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


推荐阅读