2015-09-10 11 views
26

मैं निर्देशिका में फाइलों को लूप करने और लेने की कोशिश कर रहा हूं, लेकिन मुझे इसे लागू करने में कुछ परेशानी है। एकाधिक फ़ाइलों को कैसे खींचें और फिर उन्हें किसी अन्य फ़ोल्डर में ले जाएं?किसी फ़ोल्डर में फ़ाइलों के माध्यम से लूपिंग नोड.जेएस

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

शायद आपको node.js filesystem API पर एक नज़र रखना चाहिए। निर्देशिका में फ़ाइलों को सूचीबद्ध करने के लिए * एक * कार्य हो सकता है। कृपया, यहां पूछने से पहले कुछ प्रयास दिखाएं। एक निर्देशिका को statinging आपकी समस्या के साथ बहुत कम करने के लिए है। –

+4

धन्यवाद लेकिन हाँ मुझे पता है। मैंने एपीआई को देखा और परेशानी थी इसलिए मैं यहां हूं – Prolasis

उत्तर

42

आप fs.readdir समारोह का उपयोग करने के निर्देशिका सामग्री और fs.rename समारोह वास्तव में नाम करने के लिए करना चाहते हैं। इन दोनों कार्यों में सिंक्रोनस संस्करण हैं यदि आप को की आवश्यकता है ताकि कोड को चलाने से पहले उन्हें समाप्त करने के लिए प्रतीक्षा कर सकें।

मैंने एक त्वरित लिपि लिखी जो आपने वर्णित की है।

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); 
         } 
        }); 
       }); 
     }); 
}); 

मेरी स्थानीय मशीन पर परीक्षण किया गया।

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

उदाहरण की पूर्णता के लिए निम्नलिखित पंक्तियां पहले मौजूद हैं: var fs = requ ('fs'); var path = आवश्यकता ('पथ'); –

+0

प्रक्रिया एक वैश्विक वस्तु है। आपको इसकी आवश्यकता नहीं है। अन्यथा अच्छा और धन्यवाद! – kjonsson

+0

यह पिछले संस्करणों में किया गया था जो आपने किया था। इसे "global.process" द्वारा संदर्भित करने की आवश्यकता होती थी और आवश्यक फ़ाइल इसे उजागर करती थी। टिप्पणी के लिए धन्यवाद। –

संबंधित मुद्दे