为什么fs.write中的offset参数不适用于缓冲区,但适用于字符串

时间:2014-01-09 14:41:50

标签: node.js

我遇到了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)
[...]

你能解释一下为什么我的缓冲区出错了吗?

2 个答案:

答案 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