网页设计学习笔记

HTML,CSS,JavaScript

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

Node.JS 官方的模块只提供了列出某目录所有文件的命令 fs.readdir,要用异步的方式遍历一个目录并记录所有文件的内容,需要仔细处理。下面的代码参考了后面列出的资料,并增加了排除某些文件的功能:

var fs = require('fs');
function walkInto(dir, excludes, back) {
    var result = [];
    fs.readdir(dir, function(err, files){
        if (err) back(err);
        files = files.filter(function(value){
            return (value[0] != '.') && (excludes.indexOf(value) == -1);
        });
        var pending = files.length;
        if (!pending) return back(null, result);
        files.forEach(function(file){
            fs.stat(dir + '/' + file, function(err, stats) {
                if (stats.isFile()) {
                    result.push(dir + '/' + file);
                    if (!--pending) back(null, result);
                }
                if (stats.isDirectory()) {
                    walkInto(dir + '/' + file, [], function(err, res){
                        result = result.concat(res);
                        if (!--pending) back(null, result);
                    })
                }
            });
        });
    });
}

参考资料:
[1] Stack Overflow - node.js fs.readdir recursive directory search
[2] Stack Overflow - Recursivly read a directory in NodeJS

posted on 2013-05-19 14:45  zoho  阅读(1834)  评论(0编辑  收藏  举报