我正在尝试编写逻辑,我可以从每个目录中获取文件信息,如何使用async
或任何fs
方法实现此目的。我正在将fileInfo
和filePath
传递给函数compareDates
以进一步实施。使用下面的代码,我看不到任何结果。
controller.js
var cron = require('cron-job');
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.readdirSync(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;
compareDates(fileInfo,filePath);
console.log(fileInfo);
}
});
});
})
}
cronJob();
错误
throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs
答案 0 :(得分:0)
此函数将返回目录中所有文件的文件路径数组。它以递归方式遍历指定目录中的所有文件夹和子文件夹,并忽略空文件夹。
var walk = function(dir, done) {
var results = [];
fs.readdir(dir, function(err, list) {
if (err) return done(err);
var pending = list.length;
if (!pending) return done(null, results);
list.forEach(function(file) {
file = path.resolve(dir, file);
fs.stat(file, function(err, stat) {
if (stat && stat.isDirectory()) {
walk(file, function(err, res) {
results = results.concat(res);
if (!--pending) done(null, results);
});
} else {
results.push(file);
if (!--pending) done(null, results);
}
});
});
});
};
用法:
walk(directory, function(err, results) {
// throw error if something is wrong
if (err) throw err;
results.forEach(function(path) {
// do stuff with the path
});
});
请注意,该函数将返回相对于/
或C:\
的路径;如果您希望目录相对于server / app.js文件的位置,则需要从每个路径的开头切掉__dirname
的长度。
然后,您可以在每个文件上使用fs.stat
来获取传递给您的函数所需的信息。
使用您的代码,就像:
var directories = ['/logs/dit', '/logs/st','/logs/uat'];
directories.forEach(function(directory){
walk(directory, function(listOfFiles) {
listOfFiles.forEach(function(file) {
fs.stat(file, function(err, stats) {
if (err) throw err;
var fileDate = stats.birthtime;
var filename = file;
compareDates(filename, filePath);
});
});
});
});
如果我的代码有点乱,请提前道歉。你可以做的一些事情:
for
循环代替forEach
文件数量。walk
并使用在那里进行的fs.stat
来电。希望这会有所帮助:)