我想用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.js
和CombDiacritMarks.js
,重复列出了相同的文件?
将语句console.log('-' + file)
修复为console.log(directoryName + path.sep + file)
并保存为list.js并使用命令node list.js
运行,问题2和问题3已解决。
列出了所有文件,并且没有重复相同的文件。
在终端输入node
并逐行运行程序
列出所有文件何时在节点控制台中运行后,为什么没有显示节点提示字符>
?
程序似乎停留在这里?
答案 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")
因此,您的代码似乎完全不正确。
关于你的问题