NodeJS 错误:ENODTIR:不是目录,scandir './src/functions/.DS_Store'这是什么以及如何修复它

rbl8hiat  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(293)
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}`);
}

我试图使日志功能为我的不和谐机器人,看到什么都没有发生,一切都打破后,写代码,所以我删除了所有文件和代码从主'bot.js'文件,现在它给这个错误

tmb3ates

tmb3ates1#

fs.readdirSync返回目录的所有内容,包括文件,而不仅仅是文件夹。.DS_Store是Mac用来存储Finder信息的特殊文件(不是文件夹)。
在粘贴的示例代码中,确保在迭代for循环中的内容之前检查readdirSync()返回的项是否是目录,类似于下面的代码

const functionFolders = fs.readdirSync(`./src/functions`).filter(item => item.isDirectory())
for (const folder of functionFolders) {
  // rest of the logic
}
wvmv3b1j

wvmv3b1j2#

好的,所以要删除.DS_Store文件,我只是在终端中写了下面一行,它工作了。
另外今天我有另一个关于'fs.readdirSync()'函数的错误,说提供的目录找不到,所以要修复,给予你的文件夹/文件的整个路径.***(例如,向下滚动)***
写入终端以移除/删除所有.DS_Store文件的行。
find . -name“.DS_Store”-type f -delete
示例:

(之前)

const commandsFolder = fs.readdirSync('./Commands');

(之后)

const commandsFolder = fs.readdirSync('/Users/roopa/Desktop/projects/LLbot/src/Commands');

希望有帮助:)
对不起,英语不好:)

相关问题