2010-12-31 6 views

risposta

51

È necessario copiare e scollegare quando si spostano file in partizioni diverse. Prova questo,

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

E, a differenza delle altre soluzioni, pulisce la directory di origine. –

+1

Non è molto dispendioso in termini di risorse? – Thomaschaaf

+7

util.pump è obsoleto. usa is.pipe (os) e poi ascolta l'evento 'end' sul flusso di output. – andrewrk

6

So che questa è già una risposta, ma mi sono imbattuto in un problema simile e si è conclusa con qualcosa sulla falsariga di:

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

Quello che fa è chiamare il comando cp ("copia"). Dato che stiamo uscendo da Node.js, questo comando deve essere supportato dal tuo sistema.

io so che non è il più elegante, ma ha fatto quello che mi serviva :)

+0

questo va bene se non hai bisogno di supportare Windows – Lloyd

+4

@Lloyd quindi va bene sempre: D – ruX

7

più Una soluzione al problema.

C'è un pacchetto chiamato fs.extra scritto da "coolaj86" su npm.

si utilizza in questo modo: 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'"); 
}); 

Ho letto il codice sorgente di questa cosa. Tenta di eseguire uno standard fs.rename() quindi, se fallisce, esegue una copia ed elimina l'originale utilizzando lo stesso util.pump() utilizzato da @chandru.

+0

A proposito, ho parlato coolaj86 su github e lui è consapevole che util.pump() è deprecato nel nodo 0.10 e verrà risolto a breve. – erapert

+0

L'autore del pacchetto fs-extra è jprichardson e coolaj86 è un contributore (vedere https://github.com/jprichardson/node-fs-extra per ulteriori informazioni). – davidbourguignon

4

per importare il modulo e salvarlo il file package.json

npm install mv --save 

quindi utilizzarlo in questo modo:

var mv = require('mv'); 

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

questo non è un sostituto adatto per fs.renameSync, perché non è sincrono. https://github.com/andrewrk/node-mv/issues/9 – Michael

2

Ho fatto un modulo Node.js che solo gestisce per te . Non devi pensare se verrà spostato all'interno della stessa partizione o meno. È la soluzione più rapida disponibile, poiché utilizza la recente API Node.js fs.copyFile() per copiare il file quando ci si sposta su un'altra partizione/disco.

Basta installare move-file:

$ npm install move-file 

quindi utilizzarlo in questo modo:

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

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