我遇到了fs.write(fd,buffer,offset,length,position,callback)的问题;
如果我这样做:
var fs = require('fs');
var fd = fs.openSync('./test', 'w');
var firstString = '012';
var secondString = 'hello';
fs.writeSync(fd, firstString, 0, firstString.length);
fs.writeSync(fd, secondString, 2, secondString.length);
文件“test”的内容是:“01hello”按预期
但如果我这样做
var fs = require('fs');
var fd = fs.openSync('./test', 'w');
var firstBuffer = new Buffer('012');
var secondBuffer = new Buffer('hello');
fs.writeSync(fd, firstString, 0, firstBuffer.length);
fs.writeSync(fd, secondString, 2, secondBuffer.length);
文件“test”的内容为“012”,我收到以下错误:
fs.js:429
return binding.write(fd, buffer, offset, length, position);
Error: off + len > buffer.length
at Object.fs.writeSync (fs.js:429:18)
[...]
你能解释一下为什么我的缓冲区出错了吗?
答案 0 :(得分:3)
感谢你的回答,我发现当你给一个字符串或一个缓冲区时有区别:位置参数不一样。
带有字符串,位置参数为数字2:
fs.writeSync(fd, secondString, 2, secondString.length);
使用缓冲区,position参数为4,正如文档所说:
fs.writeSync(fd, secondBuffer, 0, secondBuffer.length, 2);
非常感谢你的帮助。
答案 1 :(得分:1)
来自Node.js文档http://nodejs.org/api/fs.html#fs_fs_write_fd_buffer_offset_length_position_callback
offset和length确定要写入的部分缓冲区。
您的代码正在尝试访问字节2到7(2 + 5)。如果要附加到文件,请使用fs.append