2015-09-10 5 views
26

Ich versuche zu durchlaufen und Dateien in einem Verzeichnis abzurufen, aber ich habe einige Probleme bei der Implementierung. Wie zieht man mehrere Dateien an und verschiebt sie in einen anderen Ordner?Looping durch Dateien in einem Ordner Node.JS

var dirname = 'C:/FolderwithFiles'; 
console.log("Going to get file info!"); 
fs.stat(dirname, function (err, stats) { 
    if (err) { 
     return console.error(err); 
    } 
    console.log(stats); 
    console.log("Got file info successfully!"); 

    // Check file type 
    console.log("isFile ? " + stats.isFile()); 
    console.log("isDirectory ? " + stats.isDirectory()); 
}); 
+1

Vielleicht sollten Sie sich die Dateisystem-API node.js anschauen. Es * könnte * eine Funktion sein, um die Dateien in einem Verzeichnis aufzulisten. Bitte, zeigen Sie etwas Mühe, bevor Sie hier nachfragen. 'stat'ing ein Verzeichnis hat wenig mit Ihrem Problem zu tun. –

+4

Danke aber ja ich weiß. Ich schaute auf die API und hatte Probleme, deshalb bin ich hier – Prolasis

Antwort

42

Sie wollen die fs.readdir Funktion verwenden, um die Verzeichnisinhalte und die fs.rename Funktion zu erhalten, um tatsächlich die Umbenennung zu tun. Beide Funktionen haben synchrone Versionen, wenn Sie benötigen, um darauf zu warten, dass sie beendet werden, bevor Sie den Code danach ausführen.

Ich schrieb ein schnelles Skript, das das tut, was Sie beschrieben haben.

var fs = require('fs'); 
var path = require('path'); 
// In newer Node.js versions where process is already global this isn't necessary. 
var process = require("process"); 

var moveFrom = "/home/mike/dev/node/sonar/moveme"; 
var moveTo = "/home/mike/dev/node/sonar/tome" 

// Loop through all the files in the temp directory 
fs.readdir(moveFrom, function(err, files) { 
     if(err) { 
      console.error("Could not list the directory.", err); 
      process.exit(1); 
     } 

     files.forEach(function(file, index) { 
       // Make one pass and make the file complete 
       var fromPath = path.join(moveFrom, file); 
       var toPath = path.join(moveTo, file); 

       fs.stat(fromPath, function(error, stat) { 
        if(error) { 
         console.error("Error stating file.", error); 
         return; 
        } 

        if(stat.isFile()) 
         console.log("'%s' is a file.", fromPath); 
        else if(stat.isDirectory()) 
         console.log("'%s' is a directory.", fromPath); 

        fs.rename(fromPath, toPath, function(error) { 
         if(error) { 
          console.error("File moving error.", error); 
         } 
         else { 
          console.log("Moved file '%s' to '%s'.", fromPath, toPath); 
         } 
        }); 
       }); 
     }); 
}); 

Getestet auf meinem lokalen Rechner.

node testme.js 
'/home/mike/dev/node/sonar/moveme/hello' is a file. 
'/home/mike/dev/node/sonar/moveme/test' is a directory. 
'/home/mike/dev/node/sonar/moveme/test2' is a directory. 
'/home/mike/dev/node/sonar/moveme/test23' is a directory. 
'/home/mike/dev/node/sonar/moveme/test234' is a directory. 
Moved file '/home/mike/dev/node/sonar/moveme/hello' to '/home/mike/dev/node/sonar/tome/hello'. 
Moved file '/home/mike/dev/node/sonar/moveme/test' to '/home/mike/dev/node/sonar/tome/test'. 
Moved file '/home/mike/dev/node/sonar/moveme/test2' to '/home/mike/dev/node/sonar/tome/test2'. 
Moved file '/home/mike/dev/node/sonar/moveme/test23' to '/home/mike/dev/node/sonar/tome/test23'. 
Moved file '/home/mike/dev/node/sonar/moveme/test234' to '/home/mike/dev/node/sonar/tome/test234'. 
+0

Für die Vollständigkeit des Beispiels bestehen die folgenden Zeilen vor: var fs = require ('fs'); var path = require ('Pfad'); –

+0

Prozess ist ein globales Objekt. Du musst es nicht verlangen. Sonst schön und danke! – kjonsson

+0

Es war in früheren Versionen, die Sie getan haben. Früher musste es von "global.process" referenziert werden und die erforderliche Datei macht es verfügbar. Danke für den Kommentar. –