2017-03-16 2 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 : \ 사용자 \ 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

글쎄, 너 문제가 뭔지 알아. 그것은'directories' 배열에있는 경로와 관련이 있습니다. [이 답변] (http://stackoverflow.com/questions/8131344/what-is-the-difference-between-dirname-and-in-node-js)이 문제를 해결하는 데 도움이 될 수 있습니다. – Mikey

관련 문제