Comment faire pour déplacer le fichier a vers une partition différente ou un périphérique dans le noeud.js?

j'essaie de déplacer un fichier d'une partition à une autre dans un noeud.js script. Quand j'ai utilisé fs.renameSync j'ai reçu Error: EXDEV, Cross-device link . Je le copierais et supprimerais l'original, mais je ne vois pas de commande pour copier des fichiers non plus. Comment cela peut-il être fait?

30
demandé sur Jeremy Banks 2010-12-31 10:06:33

5 réponses

vous devez copier et déverrouiller lorsque vous déplacez des fichiers à travers différentes partitions. Essayez ceci,

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');
});
*/
51
répondu Chandra Sekar S 2013-07-07 07:39:56

une autre solution au problème.

il y a un paquet appelé fs.extra écrit par" coolaj86 " sur npm.

tu l'utilises comme ça: 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'");
});

j'ai lu le code source de cette chose. Il tente de faire un standard fs.rename() puis, s'il échoue, il fait une copie et supprime l'original en utilisant le même util.pump() que @chandru utilise.

7
répondu erapert 2013-05-26 22:40:24

je sais que cela est déjà répondu, mais j'ai couru à travers un problème similaire et a fini par quelque chose le long des lignes de:

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

ce que cela fait est d'appeler la commande cp ("copie"). Depuis que nous sommes en train de passer à l'extérieur du Nœud.js, cette commande doit être pris en charge par votre système.

je sais que ce n'est pas le plus élégant, mais il a fait ce dont j'avais besoin :)

6
répondu Justin 2013-03-07 15:04:27

pour importer le module et le sauvegarder dans votre paquet.dossier json

npm install mv --save

alors utilisez - le comme ceci:

var mv = require('mv');

mv('source_file', 'destination_file', function (err) {
    if (err) {
        throw err;
    }
    console.log('file moved successfully');
});
4
répondu ehrhardt 2017-03-10 10:57:35

j'ai fait un noeud.le module js qui s'en occupe pour vous. Vous n'avez pas à vous demander s'il va être déplacé dans la même partition ou non. C'est la solution la plus rapide disponible, car elle utilise le récent noeud fs.copyFile() .API js pour copier le fichier lors d'un déplacement vers une partition/disque différente.

il suffit d'installer move-file :

$ npm install move-file

alors utilisez - le comme ceci:

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

(async () => {
    await moveFile(fromPath, toPath);
    console.log('File moved');
})();
2
répondu Sindre Sorhus 2017-11-20 10:18:30