在 NodeJS 中更改文件的一部分而不重写整个文件

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

现在我使用readStream,然后做一些修改,然后将处理后的行写入.tmp文件。写入完成后,将重命名为原始文件名。缺点是它甚至必须写入未更改的行,这使得它非常慢

是否可以在 NodeJS 中使用光标位置(如 (x, y))编辑文件,而无需重写整个文件?

javascript node.js fs read-write
1个回答
0
投票

函数 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
© www.soinside.com 2019 - 2024. All rights reserved.