Comment puis-je déplacer des fichiers dans le noeud.js?

Comment puis-je déplacer des fichiers (comme l'interpréteur de commandes mv) sur un noeud.js? Existe t'il une méthode pour que ou devrais-je lire un fichier, écrire dans un nouveau fichier et de supprimer les anciens fichiers?

89
demandé sur Chris Kobrzak 2011-12-20 20:59:20

10 réponses

selon le commentaire seppo0010, j'ai utilisé la fonction rename pour faire cela.

http://nodejs.org/docs/latest/api/fs.html#fs_fs_rename_oldpath_newpath_callback

fs.rename (oldPath, newPath, callback)

ajouté dans: v0.0.2

oldPath <String> | <Buffer>
newPath <String> | <Buffer>
callback <Function>

rename asynchrone (2). Aucun argument autre qu'une exception possible sont donnés à la fin rappel.

98
répondu rizidoro 2017-01-17 11:34:42

cet exemple est tiré de: Node.js en Action

Un move() fonction qui renomme, si possible, ou revient à la copie

var fs = require('fs');

module.exports = function move(oldPath, newPath, callback) {

    fs.rename(oldPath, newPath, function (err) {
        if (err) {
            if (err.code === 'EXDEV') {
                copy();
            } else {
                callback(err);
            }
            return;
        }
        callback();
    });

    function copy() {
        var readStream = fs.createReadStream(oldPath);
        var writeStream = fs.createWriteStream(newPath);

        readStream.on('error', callback);
        writeStream.on('error', callback);

        readStream.on('close', function () {
            fs.unlink(oldPath, callback);
        });

        readStream.pipe(writeStream);
    }
}
32
répondu Teoman shipahi 2016-11-25 19:49:44

utilisez le MV module de noeud qui va d'abord essayer de faire un fs.rename et puis retomber à la copie et puis déverrouiller.

22
répondu andrewrk 2012-10-12 03:43:53

util.pump est déprécié dans le noeud 0.10 et génère un message d'avertissement

 util.pump() is deprecated. Use readableStream.pipe() instead

ainsi la solution pour copier des fichiers en utilisant des flux est:

var source = fs.createReadStream('/path/to/source');
var dest = fs.createWriteStream('/path/to/dest');

source.pipe(dest);
source.on('end', function() { /* copied */ });
source.on('error', function(err) { /* error */ });
16
répondu deadrunk 2013-07-08 03:22:15

utilisant la fonction renommer:

fs.rename(getFileName, __dirname + '/new_folder/' + getFileName); 

getFilename = file.extension (old path)
__dirname + '/new_folder/' + getFileName

suppose que vous voulez garder le nom du fichier inchangé.

8
répondu iulia 2016-06-22 14:23:50

en utilisant NodeJS nativement

var fs = require('fs')

var oldPath = 'old/path/file.txt'
var newPath = 'new/path/file.txt'

fs.rename(oldPath, newPath, function (err) {
  if (err) throw err
  console.log('Successfully renamed - AKA moved!')
})
8
répondu Hani 2017-01-14 04:50:20

voici un exemple d'utilisation d'util.pump, from > > Comment faire pour déplacer le fichier a vers une partition ou un périphérique différent dans le noeud.js?

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

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

util.pump(is, os, function() {
    fs.unlinkSync('source_file');
});
5
répondu alessioalex 2017-05-23 12:34:50

le module fs-extra vous permet de le faire avec sa méthode move() . J'ai déjà mis en place et il fonctionne bien si vous souhaitez déplacer un fichier d'un répertoire à un autre - c'est à dire. de supprimer le fichier à partir du répertoire source. Devrait fonctionner pour la plupart des cas de base.

var fs = require('fs-extra')

fs.move('/tmp/somefile', '/tmp/does/not/exist/yet/somefile', function (err) {
 if (err) return console.error(err)
 console.log("success!")
})
4
répondu mikeym 2015-12-28 19:55:38

c'est une reprise de la réponse de Teoman shipahi avec un nom légèrement moins ambigu, et en suivant le principe de conception de définir le code avant de tenter de l'appeler. (Alors que node vous permet de faire autrement, ce n'est pas une bonne pratique de mettre la charrue avant le cheval.)

function rename_or_copy_and_delete (oldPath, newPath, callback) {

    function copy_and_delete () {
        var readStream = fs.createReadStream(oldPath);
        var writeStream = fs.createWriteStream(newPath);

        readStream.on('error', callback);
        writeStream.on('error', callback);
        readStream.on('close', 
              function () {
                fs.unlink(oldPath, callback);
              }
        );

        readStream.pipe(writeStream);
    }

    fs.rename(oldPath, newPath, 
        function (err) {
          if (err) {
              if (err.code === 'EXDEV') {
                  copy_and_delete();
              } else {
                  callback(err);
              }
              return;// << both cases (err/copy_and_delete)
          }
          callback();
        }
    );
}
0
répondu unsynchronized 2017-05-23 12:18:25

Si vous essayez de déplacer ou de renommer un noeud.js fichier source, essayez cette https://github.com/viruschidai/node-mv . Il mettra à jour les références à ce fichier dans tous les autres fichiers.

-1
répondu William 2014-10-08 00:43:07