7

我很难让 node.js 在正确的位置写入我的文件。这是我的问题的一个示范案例:

fs = require('fs');
foo = fs.openSync('foo.txt','r+');
fs.writeSync(foo, "hello", 0, 5, 5);
fs.close(foo);

foo.txt有一行:

12345678901234567890

预期的输出是 forfoo.txt包含12345hello1234567890,但我得到的是hello678901234567890. 我在跑步node v0.8.16

这是一个错误,还是我做错了什么?

编辑:我一直在参考这些文档:fs.writeSync(fd, buffer, offset, length, position)

4

2 回答 2

8

正如文档链接所说,第二个参数是 a Buffer,但在您的代码中,您传递的是一个字符串。这样做会导致 Node 退回到为向后兼容而存在的不同函数签名。

function(fd, str, position, encoding);

所以传递正确的论点

var buf = new Buffer("hello");
fs.writeSync(foo, buf, 0, buf.length, 5);
于 2013-01-16T21:08:34.033 回答
3

这是 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

于 2013-01-16T21:13:23.793 回答