Node.js同时读写同一文件的流操作

7

TL;DR

我正在浏览一些npmgithub的解决方案,寻找一种能够允许我在两个不同的地方同时读取写入同一个文件的方法。到目前为止,我还没有找到类似的东西。是否有某种模块可以实现这个功能?

Background

本质上,我的需求是在一个大文件中按照以下顺序进行操作:

  • 读取
  • 转换
  • 写入

理想情况下,使用方法应该类似于:

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个回答

9

哦,看起来似乎有点难。

所以记录一下 - 我没有找到这样的模块,并实际上与一些负责一个不错的文件内替换模块的人讨论了这个问题。既然找不到解决方法,我决定从头开始编写它,现在它就在这里:

该模块的工作原理很简单:在读取流中消耗每个字节之前,不能写入任何字节;它在底层也非常简单(使用fs.read/write操作并注意读取和写入点)。

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


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