首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NodeJS递归地列出目录中的文件

NodeJS递归地列出目录中的文件
EN

Stack Overflow用户
提问于 2014-11-09 20:01:37
回答 2查看 4.5K关注 0票数 7

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

代码语言:javascript
运行
复制
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)时,我得到了以下错误:

代码语言:javascript
运行
复制
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的值)吗?

代码语言:javascript
运行
复制
- aaa.txt
- bbb.txt
+ my_dir
    - zzz.txt
EN

回答 2

Stack Overflow用户

发布于 2014-11-09 20:49:19

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

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

代码语言:javascript
运行
复制
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);
        }
      });
    });
  });
};
票数 8
EN

Stack Overflow用户

发布于 2014-11-09 20:49:10

代码语言:javascript
运行
复制
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(__dirname)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26827920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档