求教,怎么用异步方式计算一个文件夹下总文件数
发布于 10 年前 作者 zhangskills 3753 次浏览 最后一次编辑是 8 年前

如果是同步方式,一个递归很容易解决这个问题,异步方式怎么实现?

同步方式代码:

var fs = require('fs');
var getFileNum = function(fileName) {
 var num = 0;
 var stats = fs.statSync(fileName);
 if (stats.isDirectory()) {
  var files = fs.readdirSync(fileName);
  for ( var i = 0; i < files.length; i++) {
   num += getFileNum(fileName + '\\' + files[i]);
  }
 } else if (stats.isFile()) {
  num += 1;
 }
 return num;
}
var num = getFileNum('E:\\');
console.log(num);
6 回复
var exec = require('child_process').exec;

exec('find * -type f | wc -l', function(error, stdout, stderr) {
  console.log(stdout);
})

一楼正解 调用系统命令最省事儿

还是没解决这个问题,只是用系统命令取代的代码实现,如果换个系统,或代码再加点功能,比如说,计算文件夹下所有文件的总行数,这个代码又要全部写了

total=0
cd $1

for dir in `find * -type f`; do
  len=`wc -l < $dir`
  if [ $? -ne 0 ] ; then
    echo "\n \033[32mError: $dir\033[0m\n\n"
  else
    echo "seraching $dir $len"
    total=$(( $total+$len ))
  fi
done

echo "Total Lines: $total"

统计行数可以这么写,每个平台都是有shell命令的,JS要做系统层的脚本还真没有bash顺手。

同意楼上的,干这些事用bash才是正路

这么做是简单,但那怎么兼容不同的操作系统?

回到顶部