卡住,完整,反复列出nodejs目录中的所有文件?

时间:2017-06-20 00:36:41

标签: node.js list traversal

我想用nodejs列出指定目录中的所有文件。

var fs = require('fs');
var path = require('path');

var walk = function(directoryName) {
  fs.readdir(directoryName, function(e, files) {
    files.forEach(function(file) {
      fs.stat(directoryName + path.sep + file, function(e, f) {
        if (f.isDirectory()) {
          walk(directoryName + path.sep + file)
        } else {
          console.log('-' + file)
        }
      })
    })
  })
}

walk("/home")

结果有三个问题。

1.stuck
要在几分钟内在节点控制台中执行上述nodejs,光标就会停在那里,没有节点promt chracter >显示,只是一个静态光标。
静态游标是否意味着nodejs程序被卡住?

2.completeness
列出所有文件是真还是假,光标停在那里之前都没有留下?

3.repeatedly
在附件中,列出了许多相同的文件名,例如BasicLatin.jsCombDiacritMarks.js,重复列出了相同的文件?

enter image description here

将语句console.log('-' + file)修复为console.log(directoryName + path.sep + file)并保存为list.js并使用命令node list.js运行,问题2和问题3已解决。
列出了所有文件,并且没有重复相同的文件。

在终端输入node并逐行运行程序 列出所有文件何时在节点控制台中运行后,为什么没有显示节点提示字符>? 程序似乎停留在这里?

1 个答案:

答案 0 :(得分:1)

  

注意:这还不是一个完整的答案。需要进一步的信息   评论太短了。我会根据您的情况编辑/删除我的答案   响应。

我在我的Ubuntu机器上运行了你的代码并用退出代码0完成了。我必须处理回调上的错误以允许它运行完成但它没有被卡住。

'use strict';

var fs = require('fs');
var path = require('path');

var walk = function(directoryName) {
  fs.readdir(directoryName, function(e, files) {
    if (!e) {
      files.forEach(function (file) {
        fs.stat(directoryName + path.sep + file, function (e, f) {
          if (!e) {
            if (f.isDirectory()) {
              walk(directoryName + path.sep + file)
            } else {
              console.log(' - ' + file)
            }
          } else {
            console.log(e);
          }
        })
      })
    } else {
      console.log(e);
    }
  })
}

walk("/home")

因此,您的代码似乎完全不正确。

关于你的问题

  1. 您是如何执行代码的?
  2. 请在比/ home更小的目录层次结构上运行测试。我假设这是unix / linux机器上的/ home。
  3. 同上。我们来看看BasicLatin.js。运行显示完整路径的程序,并检查它们是否真的重复。