我正在尝试在node.js中实现inplace文件编辑,在这种情况下,在第10行附近的文件中添加一行。喜欢:
perl -pi -e '$. == 11 && print "adding a line\n"' input.txt
这个想法是打开文件进行读取,取消链接,然后打开相同的文件名进行写入(现在是新的inode)并逐行读取并进行任何更改并逐行写入。
如果我使用fs.unlinkSync,一切正常。但是如果我尝试使用fs.unlink和回调,那么inFh.on('line',...)事件不会触发(或者任何术语都是正确的,那部分永远不会明显地运行)。
同步版本(有效):
'use strict';
const readline = require('readline');
const fs = require('fs');
const inFh = readline.createInterface({
input: fs.createReadStream('input.txt')
});
function addBad() {
const outFh = fs.createWriteStream('input.txt');
outFh.on('open', () =>{
let x = 0;
inFh.on('line', (line) => {
if (x++ == 10) outFh.write("adding a line\n");
outFh.write(line+"\n");
});
});
}
fs.unlinkSync('input.txt');
addBad();
这是破损的回调版本:
'use strict';
const readline = require('readline');
const fs = require('fs');
const inFh = readline.createInterface({
input: fs.createReadStream('input.txt')
});
function addBad() {
const outFh = fs.createWriteStream('input.txt');
outFh.on('open', () =>{
let x = 0;
inFh.on('line', (line) => {
if (x++ == 10) outFh.write("adding a line\n");
outFh.write(line+"\n");
});
});
}
fs.unlink('input.txt', () => { addBad() });