2015-09-10 17 views
26

Tôi đang cố gắng lặp lại và nhận tệp trong một thư mục, nhưng tôi gặp một số sự cố khi triển khai tệp. Làm thế nào để kéo trong nhiều tập tin và sau đó di chuyển chúng vào một thư mục khác?Lặp qua các tệp trong một thư mục 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

Có lẽ bạn nên xem xét API hệ thống tệp node.js. Có * có thể * là một hàm để liệt kê các tệp trong một thư mục. Xin vui lòng, hiển thị một số nỗ lực trước khi yêu cầu ở đây. 'stat'ing một thư mục có ít liên quan đến vấn đề của bạn. –

+4

Cảm ơn nhưng có tôi biết. Tôi nhìn vào API và gặp rắc rối đó là lý do tại sao tôi ở đây – Prolasis

Trả lời

42

Bạn muốn sử dụng các chức năng fs.readdir để có được nội dung thư mục và fs.rename chức năng để thực sự làm việc đổi tên. Cả hai chức năng này đều có các phiên bản đồng bộ nếu bạn cần để đợi cho chúng hoàn tất trước khi chạy mã sau đó.

Tôi đã viết kịch bản nhanh làm những gì bạn mô tả.

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

Thử nghiệm trên máy cục bộ của tôi.

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

Để hoàn thành ví dụ, các dòng sau tồn tại trước: var fs = require ('fs'); var path = require ('path'); –

+0

là một đối tượng toàn cầu. bạn không cần phải yêu cầu nó. Nếu không tốt đẹp và cảm ơn! – kjonsson

+0

Nó được sử dụng trong các phiên bản trước đó mà bạn đã làm. Nó được sử dụng để cần được tham chiếu bởi "global.process" và tệp được yêu cầu cho thấy nó. Cảm ơn bạn đã bình luận. –

Các vấn đề liên quan