La forma más rápida de copiar un archivo en Node.js

Resuelto bonbonez asked hace 12 años • 16 respuestas

El proyecto en el que estoy trabajando (Node.js) implica muchas operaciones con el sistema de archivos (copiar, leer, escribir, etc.).

¿Qué métodos son los más rápidos?

bonbonez avatar Jul 02 '12 19:07 bonbonez
Aceptado

Utilice la forma estándar incorporada fs.copyFile:

const fs = require('fs');

// File destination.txt will be created or overwritten by default.
fs.copyFile('source.txt', 'destination.txt', (err) => {
  if (err) throw err;
  console.log('source.txt was copied to destination.txt');
});

Si tiene que admitir versiones antiguas de Node.js al final de su vida útil, así es como lo hace en versiones que no son compatibles fs.copyFile:

const fs = require('fs');
fs.createReadStream('test.log').pipe(fs.createWriteStream('newLog.log'));
Miguel Sanchez Gonzalez avatar Jul 02 '2012 13:07 Miguel Sanchez Gonzalez

Mismo mecanismo, pero esto agrega manejo de errores:

function copyFile(source, target, cb) {
  var cbCalled = false;

  var rd = fs.createReadStream(source);
  rd.on("error", function(err) {
    done(err);
  });
  var wr = fs.createWriteStream(target);
  wr.on("error", function(err) {
    done(err);
  });
  wr.on("close", function(ex) {
    done();
  });
  rd.pipe(wr);

  function done(err) {
    if (!cbCalled) {
      cb(err);
      cbCalled = true;
    }
  }
}
Mike Schilling avatar Jan 17 '2013 20:01 Mike Schilling

Desde Node.js 8.5.0 tenemos los nuevos métodos fs.copyFile y fs.copyFileSync .

Ejemplo de uso:

var fs = require('fs');

// File "destination.txt" will be created or overwritten by default.
fs.copyFile('source.txt', 'destination.txt', (err) => {
    if (err) 
        throw err;
    console.log('source.txt was copied to destination.txt');
});
Michael avatar Sep 16 '2017 12:09 Michael