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?
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.
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);
}
}
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 */ });
utilisant la fonction renommer:
fs.rename(getFileName, __dirname + '/new_folder/' + getFileName);
où
getFilename = file.extension (old path)
__dirname + '/new_folder/' + getFileName
suppose que vous voulez garder le nom du fichier inchangé.
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!')
})
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');
});
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!")
})
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();
}
);
}
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.