2011-02-12 3 views
25

Comment copier un fichier dans Node.js?Comment copier un fichier?

Exemple

+ /old 
|- image.png 
+ /new 

Je veux copier image1.png de 'vieux' dans le répertoire 'nouveau'.

Cela ne fonctionne pas.

newFile = fs.createWriteStream('./new/image2.png');  
oldFile = fs.createReadStream('./old/image1.png'); 

oldFile.addListener("data", function(chunk) { 
    newFile.write(chunk); 
}) 

oldFile.addListener("close",function() { 
    newFile.end(); 
}); 

Merci pour votre réponse!

+0

Quelque chose ici? http://nodejs.org/api.html#fs-readstream-152 http://nodejs.org/api.html#fs-writestream-154 – mplungjan

+0

@mplungjan Je viens de mettre à jour ma question. –

+0

juste mis à jour mon commentaire;) – mplungjan

Répondre

7
newFile.once('open', function(fd){ 
    require('util').pump(oldFile, newFile); 
});  
+1

Est-ce que cela fonctionne pour vous? J'utilise Node v0.4.0 et 'newFile' a zéro KB. – Baggz

+3

Vous devez attendre que l'événement 'open' du fichier soit écrit. (J'ai ajouté ceci maintenant). –

+0

un simple 'require ('util'). Pump (oldFile, newFile);' a travaillé pour moi (n'attend pas l'événement ouvert) –

14

La façon préférée actuellement:

oldFile.pipe(newFile); 
+0

et je suppose 'oldFile.on ('end', function() {console.log ('ready')});' –

-3
fs.rename('./old/image1.png', './new/image2.png', function(err){ 
    if(err) console.log(err); 
    console.log("moved"); 
}); 
+0

C'est pour ** déplacer ** (renommer) entre la même partition. Le PO demande de ** copier ** un fichier. –

6

Si vous voulez faire ce travail syncronously, il suffit de lire et écrire le fichier directement:

var copyFileSync = function(srcFile, destFile, encoding) { 
    var content = fs.readFileSync(srcFile, encoding); 
    fs.writeFileSync(destFile, content, encoding); 
} 

Bien sûr, erreur de manipulation et d'autres choses est toujours une bonne idée!