在node.js中打开文件时,由另一个软件写入文件

问题描述 投票:0回答:1

情况:1。一个应用程序(不是node.js)将数据写入某个文件,大小未知2. Node.js应该管道该文件的内容,直到它被第一个应用程序打开写入。

可能吗?

node.js stream
1个回答
0
投票

你有一些解决方案。

writeStream.js是一个简单的测试类,可以作为demo在文件中写入

const fs = require('fs')
const fd = fs.openSync('./openedFile.txt', 'w+')
const stream = fs.createWriteStream(null, {
  fd,
  encoding: 'utf8'
})
process.stdin.pipe(stream)

readStream轮询:这很简单,读取流在到达文件末尾(EOF)时会一直关闭并触发'end'事件。因此,如果您全部阅读,则无法将文件打开fd。 (在这个例子中,我不管理流是否仍然打开,因为它无法读取所有文件)

const fs = require('fs')
let streamed = 0
function readFd() {
  const fd = fs.openSync('./openedFile.txt', 'r')
  const stream = fs.createReadStream(null, {
    fd,
    encoding: 'utf8',
    start: streamed
  })
  stream.on('data', function (chunk) {
    streamed += chunk.length;
  })
  stream.pipe(process.stdout)
}

setInterval(readFd, 1000)

readStream via tail(tail命令会为你调查)

const { spawn } = require('child_process');
const child = spawn('tail', ['-f', 'openedFile.txt']);
child.stdout.pipe(process.stdout)
© www.soinside.com 2019 - 2024. All rights reserved.