Javascript 递归读取带有文件夹的目录

Javascript 递归读取带有文件夹的目录,javascript,html,node.js,fs,Javascript,Html,Node.js,Fs,我一直在尝试使用fs模块请求递归读取目录。我在这过程中遇到了一些问题,只是给了我一个文件名。以下是我所需要的: 文件名 以及该文件的目录。 此结果可以作为一个对象,也可以作为一个数组进行扩展 任何人都请帮忙。 谢谢。这里是一个递归解决方案。您可以对其进行测试,将其保存在文件中,运行节点yourfile.js/the/path/to/traverse const fs = require('fs'); const path = require('path'); const util = req

我一直在尝试使用fs模块请求递归读取目录。我在这过程中遇到了一些问题,只是给了我一个文件名。以下是我所需要的:

  • 文件名
  • 以及该文件的目录。 此结果可以作为一个对象,也可以作为一个数组进行扩展
任何人都请帮忙。
谢谢。

这里是一个递归解决方案。您可以对其进行测试,将其保存在文件中,运行
节点yourfile.js/the/path/to/traverse

const fs = require('fs');
const path = require('path');
const util = require('util');

const traverse = function(dir, result = []) {

    // list files in directory and loop through
    fs.readdirSync(dir).forEach((file) => {

        // builds full path of file
        const fPath = path.resolve(dir, file);

        // prepare stats obj
        const fileStats = { file, path: fPath };

        // is the file a directory ? 
        // if yes, traverse it also, if no just add it to the result
        if (fs.statSync(fPath).isDirectory()) {
            fileStats.type = 'dir';
            fileStats.files = [];
            result.push(fileStats);
            return traverse(fPath, fileStats.files)
        }

        fileStats.type = 'file';
        result.push(fileStats);
    });
    return result;
};

console.log(util.inspect(traverse(process.argv[2]), false, null));
输出如下所示:

[ { file: 'index.js',
    path: '/stackoverflow/test-class/index.js',
    type: 'file' },
  { file: 'message.js',
    path: '/stackoverflow/test-class/message.js',
    type: 'file' },
  { file: 'somefolder',
    path: '/stackoverflow/test-class/somefolder',
    type: 'dir',
    files: 
     [ { file: 'somefile.js',
         path: '/stackoverflow/test-class/somefolder/somefile.js',
         type: 'file' } ] },
  { file: 'test',
    path: '/stackoverflow/test-class/test',
    type: 'file' },
  { file: 'test.c',
    path: '/stackoverflow/test-class/test.c',
    type: 'file' } ]

请告诉我们您到目前为止尝试了什么“以及该文件的目录”您已经有了这个,否则使用的fs方法将不知道您正在尝试读取哪个目录。如果您指的是每个子目录的路径,那么只需在深入时将每个子目录名称连接到路径即可。但是如果没有看到您的代码,我们就无法具体告诉您如何修复代码。