5

何か足りないのでしょうか、それとも node.js の標準ファイル I/O モジュールには、通常のファイル ランダム アクセス方法に類似したものが欠けていますか?

  • seek()/fseek()
  • tell()/ftell()

これらなしでノード内の大きなファイルからランダムな固定サイズのレコードを読み取るにはどうすればよいですか?

4

4 に答える 4

9

tellそうではありませんが、ファイル内の現在の位置がわからないことや、自分自身を追跡する方法がないことはほとんどありません。

seekとのposition引数を介して間接的に公開されます。引数を指定すると、操作を実行する前にその場所をシークします。fs.readfs.writenull

于 2012-12-24T04:54:33.327 に答える
2

ノードにはこれらが組み込まれていません。取得できる最も近い方法は、パラメーターを使用fs.createReadStreamしてオフセットから読み取りを開始することです (ファイルを再度開かないように既存のものを渡します)。startfd

http://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options

于 2012-12-18T12:35:22.637 に答える
1

createReadStream は新しいファイル記述子を何度も作成すると思います。私は同期バージョンを好みます:

function FileBuffer(path) {
const fd = fs.openSync(path, 'r');

function slice(start, end) {
    const chunkSize = end - start;
    const buffer = new Buffer(chunkSize);

    fs.readSync(fd, buffer, 0, chunkSize, start);

    return buffer;
}

function close() {
    fs.close(fd);
}

return {
    slice,
    close
}

}

于 2016-10-18T12:41:29.270 に答える