node.js文件写入位置参数不起作用
我很难让node.js在正确的位置写入我的文件。 这是我的问题的一个示范案例:
fs = require('fs'); foo = fs.openSync('foo.txt','r+'); fs.writeSync(foo, "hello", 0, 5, 5); fs.close(foo);
foo.txt
有一行:
12345678901234567890
期望的输出是foo.txt
包含12345hello1234567890
,而是我得到hello678901234567890
。 我正在运行node v0.8.16
。
这是一个错误,还是我做错了什么?
编辑:我一直在引用这些文档: fs.writeSync(fd,缓冲区,偏移量,长度,位置)
正如文档的链接所说,第二个参数是一个Buffer
,但是在你的代码中你传递一个string。 这样做会导致Node回退到为了向后兼容而存在的不同的函数签名。
function(fd, str, position, encoding);
所以传递正确的论点
var buf = new Buffer("hello"); fs.writeSync(foo, buf, 0, buf.length, 5);
这里是Node.js源代码所说的:
LIB \ fs.js
fs.writeSync = function(fd, buffer, offset, length, position) { if (!Buffer.isBuffer(buffer)) { // legacy string interface (fd, data, position, encoding) position = arguments[2]; buffer = new Buffer('' + arguments[1], arguments[3]); offset = 0; length = buffer.length; } if (!length) return 0; return binding.write(fd, buffer, offset, length, position); };
如果仔细观察,如果第二个参数不是缓冲区,那么位置将变为偏移量 ,偏移量将变为0