5 Stimmen

Wie kann ich zufälligen Zugriff auf (große) Dateien mithilfe von node.js durchführen?

Fehlt mir etwas oder fehlen in dem Standard-Datei-E/A-Modul von node.js Analoga zu den üblichen Datei-Zugriffsmethoden?

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

Wie liest man in node.js zufällige Datensätze fester Größe aus großen Dateien, wenn diese Methoden fehlen?

9voto

loganfsmyth Punkte 146387

sagen ist nicht, es ist jedoch ziemlich selten, die Position, an der Sie sich in einer Datei befinden, nicht zu kennen oder keine Möglichkeit zu haben, selbst den Überblick zu behalten.

suche wird indirekt über das position-Argument von fs.read und fs.write freigelegt. Wenn das Argument angegeben wird, wird es zu dieser Position gehen, bevor es seine Operation durchführt, und wenn null wird es die vorherige Position verwenden.

2voto

yiding Punkte 3332

Node hat diese nicht eingebaut, am nächsten kommt man, wenn man fs.createReadStream mit einem start Parameter verwendet, um ab einem Offset zu lesen (übergeben Sie eine vorhandene fd, um das erneute Öffnen der Datei zu vermeiden).

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

1voto

Suprido Punkte 495

Ich nehme an, dass createReadStream immer wieder neue Dateideskriptoren erstellt. Ich bevorzuge die synchronisierte Version:

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
}

}

0voto

Verwenden Sie dies:

fs.open(path, flags[, mode], callback)

Dann dies:

fs.read(fd, buffer, offset, length, position, callback)

Lesen Sie das für weitere Details:

https://nodejs.org/api/fs.html#fs_fs_read_fd_buffer_offset_length_position_callback

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X