Node.js 同时读写流到同一个文件

标签 node.js file stream fs file-descriptor

长话短说

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

背景

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

  • 阅读
  • 转变

理想情况下,用法应该是这样的:

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

我希望这是一个真实世界的用例,但我发现的所有实现实际上都是将整个文件加载到内存中,然后保存它。我在这里是否遗漏了一个已知模块,或者是否需要实际编写这样的内容?

最佳答案

嗯……看起来很难。 :)

所以这里是记录 - 我没有发现这样的模块,实际上与一些负责文件内替换模块的人讨论过这个问题。看到没有办法解决这个问题,我决定从头开始写,这里是:

该模块的工作原理很简单,即在可读流中使用之前不能写入任何字节,并且它的底层相当简单(耦合 fs.read/write 操作,同时关注读写点)。

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

关于Node.js 同时读写流到同一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52561735/

相关文章:

javascript - Node.js,映射对象数组,并将特定值放入新数组中

javascript - 使用 Coffeescript 读取本地文件

java - 如何隐藏 Android 中现有的文件夹?

java - 如何读取和计算互联网上文​​件的哈希值

javascript - 基于文件下载的进度条

java - try-with-resource资源创建的执行顺序

查询执行后Javascript变量被覆盖

javascript - Node.js - Socket.io 只能通过 localhost 访问

file - unix 在没有缓冲区/复制的情况下将行添加到文件中

java - 使用 File#length() 两个字节太多