使用节点js和fs列出Dirs,sub-dirs及其文件

时间:2018-03-07 03:11:52

标签: javascript node.js fs

所以我试图创建一个简单的函数,列出一个集合目录中的所有文件和文件夹,在我的情况下,文件是“攻击模块”。但无论如何我有下面的功能工作一点点,但如果有任何子文件夹中的文件,它会崩溃

function getAttackModuleFiles(where, name, parentFolder){
  var parentFolder = parentFolder
  console.log('p1 '+parentFolder)
  sub++

  var path = 'adminPanel/attackModules/'
  fs.readdir(where, (err, files) => {
    if(err){
      console.log(err)
    }
    files.forEach(name => {
      console.log(sub)
      var stats = fs.statSync(where+name);
        if(stats.isFile() == true){
          var dir = path+parentFolder+'/'+name
          socket.emit('attackModule','file',name, parentFolder, sub, dir)
        }if(stats.isDirectory() == true){

            /*
            if(sub == 2){

            getAttackModuleFiles(path+name+'/',name, name)
            //getAttackModuleFiles(path+parentFolder+'/'+name+'/',name, parentFolder)
            socket.emit('attackModule','dir',name, name, sub)

          }else
           if( sub ==1){
           */

          getAttackModuleFiles(path+name+'/',name, name)
          console.log(name)
          socket.emit('attackModule','dir',name, name, sub)
         // }
        }
     });
  })
}

我还没有足够的知识知道如何解决这个问题,有人可以帮我弄清楚如何能够无限制地列出文件和文件夹

1 个答案:

答案 0 :(得分:1)

使用Walker模块有更简单的方法,其优点是

  1. 它以递归方式遍历文件和文件夹,我们根本不需要循环。
  2. 它会发出各种可以监听的事件,例如查找目录,查找文件,查找符号链接,出错等事件。

    var walker    = require('walker');
    
    if (process.argv.length <= 2) {
        console.log("Usage: " + __filename + " path/to/directory");
        process.exit(-1);
    }
    
    var path = process.argv[2];
    
    walker(path)
        .on('dir', function(dir, stat) {
            console.log('Got directory: ' + dir)
        })
        .on('file', function(file, stat) {
            console.log('Got file: ' + file)
        })
        .on('end', function() {
            console.log('All files traversed.')
        });
    
  3. 在执行node index.js testDir/

    之类的节点时将目录路径作为参数传递