2017-03-16 5 views
1

私はコードのさらなる実装を持っているすべてのディレクトリからファイル情報を取得したいが、私はここで立ち往生し、問題の下にコードが間違って実装されている任意のアイデアを貼り付けているエラーを取得していますか?あなたは、さらに操作を実行するためにそのコールバックを待つ必要があるので、nodejsでfsを使用して複数のディレクトリからファイル名を取得する方法は?

s\Ulog-0\ulog\app\serverfiles\logs\dit' 
    at Error (native) 
    at Object.fs.readdirSync (fs.js:808:18) 
    at C:\Users\WebstormProjects\Ulog-0\ulog\app\serverfiles\cronJob 
20 
    at Array.forEach (native) 
    at cronJob (C:\Users\WebstormProjects\Ulog-0\ulog\app\serverfile 
obs.js:7:13) 
    at Object.<anonymous> (C:\Users\\WebstormProjects\Ulog-0\ulog\app 
+0

全く予期しない動作が存在しないように、あなたはおそらく、非同期的にディレクトリをお読みください。 – Mikey

答えて

1

readdir

cron.js

var fs = require('fs'); 
var path = require('path'); 
var async = require('async'); 
var directories = ['./logs/dit', './logs/st','./logs/uat'] 
function cronJob() { 
directories.forEach(function(dir){ 
    var files = fs.readdir(dir); 
    async.eachSeries(files, function(file,callback) { 
      var filePath = path.join(dirPath, file); 
      var fileInfo = {}; 
      fs.stat(filePath, function(err, stats) { 
       if (err) { 
       console.info("File doesn't"); 
       } else { 
       fileInfo.fileDate = stats.birthtime; 
       fileInfo.filename = file; 
       console.log(fileInfo); 
//     compareDates(fileInfo,filePath); 
//     callback(); 
       } 
      }); 
     }); 
}) 

} 

cronJob(); 

エラーは非同期です。

正確に何が問題なのかを知るのは難しいので、私はログステートメントを含めました。

編集

var fs = require('fs'); 
var path = require('path'); 
var async = require('async'); 
var directories = ['/../../logs/dit', '/../../logs/st', '/../../logs/uat']; 

// loop through each directory 
async.eachSeries(directories, function (dir, cb1) { 
    var dir = __dirname + dir; 
    console.log('reading', dir); 
    // get files for the directory 
    fs.readdir(dir, function (err, files) { 
     if (err) return cb1(err); 

     // loop through each file 
     async.eachSeries(files, function (file, cb2) { 
      var filePath = path.resolve(dir + '/' + file); 
      // get info for the file 
      fs.stat(filePath, function (err, stats) { 
       if (err) return cb2(err); 
       var fileInfo = { fileDate: stats.birthtime, filename: file }; 
       console.log('fileInfo', fileInfo); 
       compareDates(fileInfo, filePath); 
       cb2(null, fileInfo); 
      }); 
     }, cb1); 

    }); 
}, function (err, fileInfos) { 
    if (err) { 
     console.info('error', err); 
     return;  
    } 
    // when you're done reading all the files, do something... 
}); 
+0

このエラーが発生しました。「C:¥Users¥sh529u¥WebstormProjects¥Ulog-0¥ulog¥app¥serverfiles」ノードcronJobs.j ./logs/dit dirエラー{[エラー:ENOENT:そのようなファイルまたはディレクトリはありません。 SCANDIR 'C:\ Users \ユーザーSH5 WebstormProjects \ ULOG-0 \ ULOG \アプリ\ serverfiles \ログ\ DIT'] はerrno:-4058、 コード: 'ENOENT'、 システムコール: 'SCANDIR'、 パス ' C:\\ Users \\ sh529u \\ WebstormProjects \\ Ulog-0 \\ ulog \\ app \\ serverfiles' – hussain

+0

'logs'フォルダはルートレベルにあり、関数' app/serverfiles/cronJob.js ' – hussain

+0

です問題が何であるかを知る。 'ディレクトリ'配列内のパスと関係しています。 [この回答](http://stackoverflow.com/questions/8131344/what-is-the-difference-between-dirname-and-in-node-js)あなたがそれを修正するのに役立ちます。 – Mikey

関連する問題