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

我想用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,光标停在那里,没有节点的显示,只是一个静态的光标。
静态游标是否意味着nodejs程序被卡住了?

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

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

在这里输入图像说明

要将语句console.log('-' + file)console.log(directoryName + path.sep + file)并保存为list.js,并使用命令node list.js运行, node list.js解决问题2和问题3。
所有列出的文件和重复的文件都不一样。

在terminalinputnode并逐行运行程序。
为什么在节点控制台中运行时,没有节点提示字符>列出所有文件后显示?
程序似乎卡在这里?

注意:这还不是一个完整的答案。 需要更多的信息,但评论太短。 我将根据您的回答编辑/删除我的答案。

我在你的Ubuntu机器上运行了你的代码,它的退出代码为0。我必须在callback中处理错误,让它运行完成,但是没有卡住。

 '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更小的目录层次结构的testing。 我假设这是/ unix / linux机器上的home。
  3. 同上。 我们来看BasicLatin.js。 运行显示完整path的程序,并检查它们是否是真正重复的。
    Interesting Posts