2010-12-31 17 views

Respuesta

51

Debe copiar y desvincular al mover archivos a través de diferentes particiones. Prueba de esto,

var fs = require('fs'); 
//var util = require('util'); 

var is = fs.createReadStream('source_file'); 
var os = fs.createWriteStream('destination_file'); 

is.pipe(os); 
is.on('end',function() { 
    fs.unlinkSync('source_file'); 
}); 

/* node.js 0.6 and earlier you can use util.pump: 
util.pump(is, os, function() { 
    fs.unlinkSync('source_file'); 
}); 
*/ 
+0

Y, a diferencia de las otras soluciones, se limpia el directorio de origen. –

+1

¿No es esto muy intensivo en recursos? – Thomaschaaf

+7

util.pump está en desuso. use is.pipe (os) y luego escuche el evento 'end' en el flujo de salida. – andrewrk

6

sé que esto ya está contestada, pero me encontré con un problema similar y terminó con algo en la línea de:

require('child_process').spawn('cp', ['-r', source, destination]) 

Lo que esto hace es llamar al comando cp ("dupdo"). Como estamos saliendo de Node.js, este comando debe ser compatible con su sistema.

Yo sé que no es el más elegante, pero sí lo que necesitaba :)

+0

esto está bien si no necesita soportar Windows – Lloyd

+4

@Lloyd así que siempre está bien: D – ruX

7

Uno más solución al problema.

Hay un paquete llamado fs.extra escrito por "coolaj86" en npm.

que lo utilice de esta manera: npm install fs.extra

fs = require ('fs.extra'); 
fs.move ('foo.txt', 'bar.txt', function (err) { 
    if (err) { throw err; } 
    console.log ("Moved 'foo.txt' to 'bar.txt'"); 
}); 

He leído el código fuente de esta cosa. Intenta hacer un estándar fs.rename() y, si falla, copia y elimina el original utilizando el mismo util.pump() que usa @chandru.

+0

Por cierto, he hablado con coolaj86 en github y sabe que util.pump() está en desuso en el nodo 0.10 y lo arreglará en breve. – erapert

+0

El autor del paquete fs-extra es jprichardson y coolaj86 colabora (ver https://github.com/jprichardson/node-fs-extra para obtener más información). – davidbourguignon

4

importar el módulo y guardarlo en su archivo package.json

npm install mv --save 

luego usarlo de esta manera:

var mv = require('mv'); 

mv('source_file', 'destination_file', function (err) { 
    if (err) { 
     throw err; 
    } 
    console.log('file moved successfully'); 
}); 
+0

este no es un reemplazo adecuado para fs.renameSync, porque no es síncrono. https://github.com/andrewrk/node-mv/issues/9 – Michael

2

hice un módulo de Node.js que solo lo hace por ti . No tiene que pensar si se moverá dentro de la misma partición o no. Es la solución más rápida disponible, ya que utiliza la reciente API fs.copyFile() Node.js para copiar el archivo cuando se mueve a una partición/disco diferente.

Sólo tiene que instalar move-file:

$ npm install move-file 

luego usarlo como esto:

const moveFile = require('move-file'); 

(async() => { 
    await moveFile(fromPath, toPath); 
    console.log('File moved'); 
})(); 
Cuestiones relacionadas