TL;博士
我正在浏览npm
上的许多解决方案,github
正在寻找允许我同时在两个不同位置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(并替换内容而不将所有内容加载到内存中。
我希望这是一个真实的用例,但我发现的所有实现实际上都将整个文件加载到内存中,然后保存。我在这里错过了一个已知的模块,还是需要实际编写这样的东西?
嗯...... 似乎很难。 :)
所以这是记录 - 我没有找到这样的模块,实际上与一些负责一个不错的文件内替换模块的人讨论了这个问题。看到没有办法解决这个问题,我决定从头开始编写它,这里是:
- GitHub 上的 signicode/rw-stream repo
- RW 流在 npm
该模块的工作原理很简单,即在可读流中消耗之前不能写入任何字节,并且在下面相当简单(fs.read/write
操作与关注读写点(。
如果你觉得这有用,那么我很高兴。 :)