2015-09-10 18 views
26

ディレクトリ内のファイルをループスルーしてピックアップしようとしていますが、実装に問題があります。複数のファイルをプルして別のフォルダに移動するには?フォルダ内のファイルをループする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

おそらく、node.jsファイルシステムAPIを参照する必要があります。ディレクトリ内のファイルを一覧表示する機能があるかもしれません。ここに尋ねる前に、何か努力をしてください。ディレクトリの 'stat'はあなたの問題とはほとんど関係がありません。 –

+4

ありがとうございます。はい、私は知っています。私はAPIを見て、それが私がここにいるのを悩ましていた – Prolasis

答えて

42

あなたは、ディレクトリの内容とfs.rename機能は、実際に名前変更を行うために取得するためにfs.readdir機能を使用します。 を必要とする場合、これらの関数は同期バージョンを持っています。後でコードを実行する前にそれらが終了するのを待つ必要があります。

私はあなたが説明したことを行うクイックスクリプトを書いた。

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 = require( 'fs'); var path = require( 'path'); –

+0

プロセスはグローバルオブジェクトです。それを要求する必要はありません。そうでなければ素敵でありがとう! – kjonsson

+0

以前のバージョンで使用していました。それは "global.process"によって参照される必要があり、必要なファイルはそれを公開します。コメントありがとう。 –

関連する問題