/**
* 獲取指定目錄內全部文件大小總和 單位爲字節
* @param dir
* @param callback
*/
function getdirsize(dir,callback){
var size = 0;
fs.stat(dir,function(err,stats){
if(err) return callback(err);//若是出錯
if(stats.isFile()) return callback(null,stats.size);//若是是文件
fs.readdir(dir,function(err,files){//若是是目錄
if(err) return callback(err);//若是遍歷目錄出錯
if(files.length==0) return callback(null,0);//若是目錄是空的
var count = files.length;//哨兵變量
for(var i = 0;i<files.length;i++){
getdirsize(path.join(dir,files[i]),function(err,_size){
if(err) return callback(err);
size+=_size;
if(--count<=0){//若是目錄中全部文件(或目錄)都遍歷完成
callback(null,size);
}
});
}
});
});
}get
var walk = function(dir, done) {
//var results = [];
var size = 0;
fs.readdir(dir, function(err, list) {
if (err) return done(err);
var pending = list.length;
if (!pending) return done(null, size);
list.forEach(function(file) {
file = path.resolve(dir, file);
fs.stat(file, function(err, stat) {
if (stat && stat.isDirectory()) {
walk(file, function(err, res) {
size = size+res;
if (!--pending) done(null, size);
});
} else {
size = size+stat.size;
if (!--pending) done(null, size);
}
});
});
});
};
io