我目前正在尝试使用NodeJS编写二进制文件。
我现在遇到的问题是,我不知道如何在两个字节之间插入数据而不会覆盖以下字节。
给定:
04 42 55 43 48 04
我知道想在55
和43
之间插入48
。
预期结果:04 42 55 43 55 48 04
实际结果:04 42 55 43 55 04
我使用以下代码写入我的文件:
fs.write(fd, 0x55, 4, (err) => {
if (err) throw err;
fs.close(fd);
});
答案 0 :(得分:1)
我无法找到任何解决方案,所以我自己写了
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);
});