Node.js NodeJS将二进制数据写入文件而不覆盖
我目前正在尝试使用NodeJS编写一个二进制文件 我现在有一个问题,我不知道如何在两个字节之间插入数据而不覆盖下面的字节 例子 鉴于:Node.js NodeJS将二进制数据写入文件而不覆盖,node.js,Node.js,我目前正在尝试使用NodeJS编写一个二进制文件 我现在有一个问题,我不知道如何在两个字节之间插入数据而不覆盖下面的字节 例子 鉴于: 044255434804 我知道要在43和48之间插入55 预期结果:04425543554804 实际结果:044255435504 代码 我正在使用以下代码写入我的文件: fs.write(fd, 0x55, 4, (err) => { if (err) throw err; fs.close(fd); }); 我找不到任何解决办法,
044255434804
我知道要在43
和48
之间插入55
预期结果:04425543554804
实际结果:044255435504
代码
我正在使用以下代码写入我的文件:
fs.write(fd, 0x55, 4, (err) => {
if (err) throw err;
fs.close(fd);
});
我找不到任何解决办法,所以我自己写的
function insert_data(fd, data, position, cb) {
// ensure data i Buffer
if (!Buffer.isBuffer(data)) {
data = Buffer.from(data);
}
// get file size
fs.fstat(fd, (err, stat) => {
if (err) {
return cb(err);
}
// calculate size for following bytes in file and allocate
const buffer_size = stat.size > position ? stat.size - position : 0;
const buffer = Buffer.alloc(buffer_size);
// read bytes to by written after inserted data
fs.read(fd, buffer, 0, buffer_size, position, (err, bytesRead, buffer) => {
if (err) {
return cb(err);
}
// concatenate new buffer containing data to be inserted and remaining bytes
const new_buffer = Buffer.concat([
data,
buffer
], data.length + buffer_size);
// write new buffer starting from given position
fs.write(fd, new_buffer, 0, new_buffer.length, position, (err) => {
if (err) {
return cb(err);
}
fs.close(fd, cb);
});
});
});
}
fs.open("test.bin", "r+", (err, fd) => {
insert_data(fd, [0x55], 4, console.dir);
});
非常感谢:)也在考虑这种方法,但不想让它变得比需要的更复杂。