现在我使用readStream,然后做一些修改,然后将处理后的行写入.tmp文件。写入完成后,将重命名为原始文件名。缺点是它甚至必须写入未更改的行,这使得它非常慢
是否可以在 NodeJS 中使用光标位置(如 (x, y))编辑文件,而无需重写整个文件?
函数 fs.write、fs.writev、fs.createWriteStream 都接受名为“position”的选项来设置编辑字节光标位置。您可以使用这些功能来编辑文件的特定部分,而无需覆盖整个页面。
但是,这需要你清楚地了解行位置与其对应的字节位置之间的关系。
例如,
const add = (name) => {
const fd = fs.openSync('file', 'a');
const buffer = Buffer.alloc(20); // each name occupies 20 bytes
buffer.write(name);
fs.write(fd, buffer, (err, bytesWritten, buffers)=>{
console.log('-error', err)
});
}
const update = (nameIndex, name) => {
const fd = fs.openSync('file', 'a+');
const buffer = Buffer.from(name);
fs.write(fd, buffer, { position: nameIndex*20 }, (err, bytesWritten, buffers)=>{
console.log('-error', err)
});
}
add('Tom');
add('Jerry');
update(1, 'Jerry2'); // will only update jerry to jerry2