为什么readdirSync()没有说出这样的文件或目录?

时间:2019-12-09 20:47:45

标签: javascript node.js

index.js

const fs = require('fs');
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

文件系统:

src
-commands
  -stuff.js
-config.json
-index.js

错误:

Error: ENOENT: no such file or directory, scandir './commands/'
    at Object.readdirSync (fs.js:783:3)

该文件夹在那里,并且其中有文件。 我试过'./commands/','./commands','commands',似乎没有任何作用。

3 个答案:

答案 0 :(得分:3)

您在Windows上。 Windows的路径分隔符是\,而不是/。尝试通过以下方式使程序平台不可知:

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

const commandDir = path.join(__dirname, "commands");
const commandFiles = fs.readdirSync(commandDir).filter(file => file.endsWith('.js'));

console.log(commandFiles);

答案 1 :(得分:1)

尝试使用path模块的处理路径,如下所示

const path = require('path');

const dirPath = path.resolve(__dirname, './commands');

然后将dirPath传递给readdirSync函数。 path是内部的node.js模块,因此您无需安装任何内容

答案 2 :(得分:0)

使用正则表达式

const fs = require('fs');

let searchPath = "./mydirectory";
let searchFileName = ".*myfile.*";

let searchFoundFiles = fs
    .readdirSync(searchPath)
    .filter((f) => new RegExp(searchFileName).test(f));

if (searchFoundFiles.length) {
    console.log("File already exists");
}