NodeJS / discord.js:读取特定目录的文件夹中的所有文件

时间:2019-11-25 22:35:33

标签: node.js discord.js

我有一个正在编写的Discord机器人,我正在做的一件事是根据(实用程序,系统等)中的类别将所有命令分成子文件夹。 >。

我遇到的问题是我不确定如何在/commands目录中找到所有文件夹,然后从所有这些文件夹中读取所有文件。我已经指定要读取目录中的所有文件夹,现在我需要读取所有子文件夹(及其中的文件)。

我可以在这方面寻求帮助吗?预先感谢!


[编辑:处理初始帖子中的评论]这是我当前拥有的代码,该代码当前仅加载在基本目录(而不是子文件夹)中找到的所有文件:

const init = async () => {
  const cmdFiles = await readdir("commands");
  client.logger.log(`Loading a total of ${cmdFiles.length} commands.`);
  cmdFiles.forEach(f => {
    if (!f.endsWith(".js")) return;
    const response = client.loadCommand(f);
    if (response) console.log(response);
  });

  const evtFiles = await readdir("./events/");
  client.logger.log(`Loading a total of ${evtFiles.length} events.`);
  evtFiles.forEach(file => {
    const eventName = file.split(".")[0];
    client.logger.log(`Loading Event: ${eventName}`);
    const event = require(`./events/${file}`);
    client.on(eventName, event.bind(null, client));
  });

  client.levelCache = {};
  for (let i = 0; i < client.config.permLevels.length; i++) {
    const thisLevel = client.config.permLevels[i];
    client.levelCache[thisLevel.name] = thisLevel.level;
  }

  client.login(client.config.token);
};

2 个答案:

答案 0 :(得分:1)

因此,看起来洛朗得到了答案!

我要做的是创建抓取功能(在目录及其子目录中查找所有文件),然后将其设置为稍后要调用的数组。

感谢您的帮助,洛朗!我已将您的回答标记为该问题的答案。

答案 1 :(得分:0)

您要阅读递归吗?

进行这样的抓取功能:

async function crawl(directory, filesArray) {
    const dirs = await fsPromises.readdir(directory, {
        withFileTypes: true 
    });

    //loop through all files/directories
    for (let i = 0; i < dirs.length; i++) {
        const currentDir = dirs[i];
        const newPath = path.join(directory, currentDir.name);
         if (currentDir.isDirectory()) {
             //if directory crawl again.
             await crawl(newPath, filesArray);
         }
         else {
             //if it is a file append it to the array
             filesArray.push(newPath);
         }
    }
}

获取目录和子目录中的所有文件:

const init = async () => {
    let cmdFiles = []; // create empty array and pass it into the crawl function
    await crawl(baseDirectory, cmdFiles);
    // now cmdFiles array has all the files in directory & subdirectories.
};

当然,别忘了导入fs:

const fs = require('fs');
const fsPromises = fs.promises;

我希望这会有所帮助,否则请发表评论,我会更改答案。