为什么在fs.write中的偏移量参数不适用于缓冲区,而是使用string
我遇到了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);
文件“testing”的内容是“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) [...]
你能解释一下为什么我的缓冲区出错了吗?
感谢你的回答,我发现当你给一个string或一个缓冲区时有一个区别:position参数是不一样的。
用一个string,位置参数是数字2:
fs.writeSync(fd, secondString, 2, secondString.length);
有一个缓冲区,位置参数是数字4,正如文档所说:
fs.writeSync(fd, secondBuffer, 0, secondBuffer.length, 2);
非常感谢您的帮助。
从Node.js文档http://nodejs.org/api/fs.html#fs_fs_write_fd_buffer_offset_length_position_callback
偏移量和长度决定了要写入的缓冲区的部分 。
您的代码尝试访问字节2到7(2 + 5)。 如果要附加到该文件,请使用fs.append