复习nodejs,写了一个遍历文件夹内文件的工具。效率比系统自带的搜索文件功能慢一点点,好处是调用方便,通过事件来通知发现的文件或者目录。
dir.js模块代码
/******
last update: 2016-11-16
author: treemonster
https://treemonster.github.io/
********/
var fs=require('fs');
var path=require('path');
module.exports=function(dir){
var ev=new (require('events'));
var dirs=[];
void function loop(dir){
fs.readdir(dir,function(e,files){
if(e)return ev.emit('error',dir);
else ev.emit('dir',path.resolve(dir));
Promise.all(files.map(function(file){
var defer=Promise.defer();
var full=dir+path.sep+file;
fs.stat(full,function(e,stats){
defer\[e?'reject':'resolve'](stats);
});
return defer.promise.then(function(stats){
if(stats.isDirectory())dirs.push(full);
else ev.emit('file',path.resolve(full));
},function(e){
ev.emit('error',full);
});
})).then(function(){
dirs.length?loop(dirs.shift()):ev.emit('finish');
});
});
}(dir);
ev.on('error',()=>{})
return ev;
};
用法
var f=require('./dir');
new f('/').on('file',function(file){
console.log('file found:',file)
}).on('dir',function(dir){
console.log('dir found:',dir);
}).on('finish',function(){
console.log('search completed');
})
相关文档
随便看看
畅言模块加载中