Node.js 如果偏移量在文件';s范围?

Node.js 如果偏移量在文件';s范围?,node.js,Node.js,我试图通过一个4字节的缓冲区以迭代偏移量覆盖预先生成的1GB文件的一些内容 据我所知,我使用的是正确的标志: const fd = fs.openSync(dataPath, "r+") // also tried "a+" 并且文件大小看起来在以下范围内: let stats = fs.statSync(dataPath) let fileSizeInBytes = stats["size"] let fileSizeInMega

我试图通过一个4字节的缓冲区以迭代偏移量覆盖预先生成的1GB文件的一些内容

据我所知,我使用的是正确的标志:

const fd = fs.openSync(dataPath, "r+") // also tried "a+"

并且文件大小看起来在以下范围内:

let stats = fs.statSync(dataPath)
let fileSizeInBytes = stats["size"]
let fileSizeInMegabytes = fileSizeInBytes / 1000000
console.log("fileSizeInMegabytes", fileSizeInMegabytes) // => fileSizeInMegabytes 1000
但当我尝试编写更新时:

const bufferSize = 74

let pointer = (timestampSet.size * 4) + 4
for (let j = 0; j < timestampSet.size; j++) {
  pointer += mapIterator.next().value * bufferSize
  const pointerBuffer = Buffer.alloc(4)
  pointerBuffer.writeUInt32BE(pointer, 0) // <Buffer 00 2e 87 e4>
  console.log("writing", pointerBuffer, "to file", dataPath, "at offset", j * 4)
  // writing <Buffer 00 2e 87 e4> to file E://data.odat at offset 4
  fs.writeSync(fd, pointerBuffer, j * 4, 4)
}
fs.close(fd).then(() => {
  console.log("write stream closed")
})

iterateProcess()
const bufferSize=74
让指针=(timestampSet.size*4)+4
for(设j=0;j{
console.log(“写流关闭”)
})
迭代过程()
我得到一个错误:

RangeError [ERR_OUT_OF_RANGE]: The value of "length" is out of range. It must be <= 0. Received 4

RangeError[错误超出范围]:长度的值超出范围。一定是您似乎误解了
writeSync
参数<代码>偏移量
指的是缓冲区中的位置,而不是文件中的位置。对于文件中的地址,请使用
position

错误消息来自这样一个事实,即系统无法在缓冲区中找到从您指定的缓冲区位置开始的4个字节

您的代码应为:

fs.writeSync(fd, pointerBuffer, 0, 4, j*4)
从:

offset
确定要写入的缓冲区部分,
length
是一个整数,指定要写入的字节数

位置
是指从文件开头开始写入此数据的偏移量。如果
位置类型!='编号“
,数据将写入当前位置。[……]


理想情况下,问题包含一个“最小的工作示例”——其他人可以运行的完整但很少的代码。这里不是这样。因此,在不运行它的情况下,我认为您应该重新检查
writeSync
参数
offset
指的是缓冲区,您的意思似乎是指定目标位置
fs.writeSync(fd,pointerBuffer,0,4,j*4)
可能是对的。检查@snwflk是的,你是对的。我把文件读了很多遍,只是一再误解了args的解释。