gpt4 book ai didi

javascript - NodeJS递归列出目录中的文件

转载 作者:数据小太阳 更新时间:2023-10-29 05:12:25 27 4
gpt4 key购买 nike

我正在尝试使用以下代码列出目录中的所有文件(以及任何子目录中的文件):

var fs = require('fs')

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

walk(__dirname)

但是,当我的代码尝试在第 8 行调用 walk(file) 时,出现以下错误:

TypeError: Cannot call method 'isDirectory' of undefined
at program.js:7:15
at Object.oncomplete (fs.js:107:15)

为什么 f 未定义?如果我有下面的目录结构,代码不应该将 aaa.txtbbb.txt 识别为文件,将 my_dir 识别为目录它在哪一点递归调用 walk 并再次开始该过程(zzz.txt 是 f 的值)?

- aaa.txt
- bbb.txt
+ my_dir
- zzz.txt

最佳答案

函数 fs.readdir 列出该目录中的简单文件名,而不是它们的绝对路径。这就是为什么程序找不到它们,从而导致 fs.stat 出错的原因。

解决方案如下:将目录路径名连接到文件。

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

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

关于javascript - NodeJS递归列出目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26827920/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com