我递归列出文件,但是当我尝试列出子目录中的所有文件时出现以下错误。
Error: ENOENT: no such file or directory, lstat 'config'
at Object.lstatSync (fs.js:838:3)
at files.forEach.file (D:\merkletrool\dataAccess.js:13:32)
at Array.forEach (<anonymous>)
at fs.readdir (D:\merkletrool\dataAccess.js:12:15)
at FSReqWrap.oncomplete (fs.js:141:20)
代码如下:
function listAllFiles(path) {
console.log("directory path " + path);
fs.readdir(path, (err, files) => {
if (err) {
console.log(err);
}
files.forEach(file => {
let file_stat = fs.lstatSync(file);
if (file_stat.isFile()) {
list_files.push(file);
console.log("is file");
} else if (file_stat.isDirectory()) {
console.log(file + " here");
listAllFiles(path + file + "\\");
}
});
});
}
起初,我认为路径不正确,所以,我添加了
path + file + "\\"
但是问题不在于此。错误SEEMS与.git文件夹中名为“ config”的文件有关。由于某种原因,我不明白,它说它不存在,但是确实存在。有任何提示可以帮助我理解和修复吗?
完整的控制台日志:
答案 0 :(得分:1)
您的第一个直觉确实是正确的。该错误明确表明您正在尝试从当前工作目录而不是config
目录中读取文件.git
。
确保使用路径添加文件前缀,如下所示:
files.forEach(file => {
let file_stat = fs.lstatSync(require('path').join(path, file));
(注意:通常,您最好将const path = require('path');
放在文件顶部。我建议这样做,但是请确保重命名函数参数path
-filePath
是一个很好的替代方法。 )