我有一个正在编写的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);
};
答案 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;
我希望这会有所帮助,否则请发表评论,我会更改答案。