7

node.jsをファイルの正しい位置に書き込むのに苦労しています。これが私の問題の実例です:

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

foo.txt1行あります:

12345678901234567890

期待される出力にはがfoo.txt含まれています12345hello1234567890が、代わりに。を取得してhello678901234567890います。私は走っていnode v0.8.16ます。

これはバグですか、それとも私は何か間違ったことをしていますか?

編集:私はこれらのドキュメントを参照しています:fs.writeSync(fd、buffer、offset、length、position)

4

2 に答える 2

8

ドキュメントへのリンクにあるように、2番目の引数はBufferですが、コードでは文字列を渡しています。これを行うと、ノードは後方互換性のために存在する別の関数シグネチャにフォールバックします。

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);
};

2番目の引数がバッファでない場合に注意深く見ると、位置はオフセットになり、オフセットは0になります。

于 2013-01-16T21:13:23.793 に答える