node:internal/fs/utils:351
throw err;
^
Error: ENOTDIR: not a directory, scandir './src/functions/.DS_Store'
at Object.readdirSync (node:fs:1532:3)
at Object.<anonymous> (/Users/roopa/Desktop/projects/LLbot/src/bot.js:43:6)
at Module._compile (node:internal/modules/cjs/loader:1255:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1309:10)
at Module.load (node:internal/modules/cjs/loader:1113:32)
at Module._load (node:internal/modules/cjs/loader:960:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12)
at node:internal/main/run_main_module:23:47 {
errno: -20,
syscall: 'scandir',
code: 'ENOTDIR',
path: './src/functions/.DS_Store'
}
出现错误的部分代码
const functionFolders = fs.readdirSync(`./src/functions`);
for (const folder of functionFolders) {
const functionFiles = fs
.readdirSync(`./src/functions/${folder}`)
.filter((file) => file.endsWith(".js"));
for (const file of functionFiles) require(`./functions/${folder}/${file}`);
}
我试图为我的 Discord 机器人创建日志功能,但发现什么也没有发生,并且在编写代码后一切都崩溃了,所以我从主“bot.js”文件中删除了所有文件和代码,现在它给出了此错误
fs.readdirSync
返回目录的所有内容,包括文件而不仅仅是文件夹。 .DS_Store
是Mac用来存储Finder
信息的特殊文件(不是文件夹)。
在您粘贴的示例代码中,请确保在迭代
readdirSync()
循环中的内容之前检查 for
返回的项目是否是目录,如下所示
const functionFolders = fs.readdirSync(`./src/functions`).filter(item => item.isDirectory())
for (const folder of functionFolders) {
// rest of the logic
}
我有同样的错误,但是在命令中 我发现的修复看起来像这样
constfoldersPath = path.join(__dirname, '命令'); const commandFolders = fs.readdirSync(foldersPath).filter(file => file !== '.DS_Store');
好的,为了删除 .DS_Store 文件,我刚刚在终端中编写了以下行并且它起作用了。
今天我还遇到了有关“fs.readdirSync()”函数的另一个错误,表示找不到提供的目录,因此要修复该问题,只需提供文件夹/文件的完整路径即可。 (例如,向下滚动)
在终端中写入的行以删除/删除所有 .DS_Store 文件。
找到。 -名称“.DS_Store”-类型f-删除
示例:
(之前)
const commandsFolder = fs.readdirSync('./Commands');
(之后)
const commandsFolder = fs.readdirSync('/Users/roopa/Desktop/projects/LLbot/src/Commands');
希望有帮助:)
抱歉英语不好:')