TL;DR
我正在浏览一些npm
和github
的解决方案,寻找一种能够允许我在两个不同的地方同时读取
和写入
同一个文件的方法。到目前为止,我还没有找到类似的东西。是否有某种模块可以实现这个功能?
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),并替换内容而不将所有内容加载到内存中。
我认为这是一个真实世界的用例,但是我发现所有的实现都会将整个文件加载到内存中,然后再保存。我是否遗漏了某个已知的模块,或者确实需要编写类似的代码呢?