使用 Node FS 获取包含字符串的文件夹中的所有文件,将文件名推送到数组和 return 数组
Get all files within a folder containing string, push filenames to array and return array using Node FS
如标题所述,我想读取特定目录中的所有文件和 return 内容中包含特定字符串的所有文件的名称。
到目前为止我的代码是这样的:
const dirname = path.resolve("./results/");
async function readFiles(dirname) {
const allResults = []
fs.readdir(dirname, function(err, filenames) {
if (err) {
console.log(err);
return;
}
filenames.forEach(async function(filename) {
fs.readFile(dirname + "/" + filename, 'utf-8', function(err, content) {
if (err) {
console.log(err);
return;
}
if (content.includes('content string')) {
allResults.push(filename);
}
});
});
});
return allResults;
}
readFiles(dirname).then((res) => {
console.log(res);
})
我得到的结果是 []
所以我知道这是 promises 和异步函数的问题,然而,这不是我完全掌握的概念,尽管尝试了几种可能性的组合(new Promise()
,或 .then
, await
,或 readdirSync
和 readFileSync
) 我没有成功。
我错过了什么,所以它 return 仅在读取所有文件后才成为 allResults
数组?
您应该放弃回调语法并使用 fs.promises Api。这看起来干净多了
const fs = require("fs").promises;
const path = require("path");
const dirname = path.resolve("./results/");
async function readDir(dirname) {
const allResults = [];
try {
const files = await fs.readdir(dirname);
for (const fileName of files) {
try {
const content = await fs.readFile(`${dirname}/${fileName}`, {
encoding: "utf-8"
});
if (content.includes("content string")) {
allResults.push(fileName);
}
} catch (error) {
console.log(error.message);
}
}
return allResults;
} catch (error) {
console.log(error);
}
}
readDir(dirname).then(data => {
console.log(data);
});
如标题所述,我想读取特定目录中的所有文件和 return 内容中包含特定字符串的所有文件的名称。
到目前为止我的代码是这样的:
const dirname = path.resolve("./results/");
async function readFiles(dirname) {
const allResults = []
fs.readdir(dirname, function(err, filenames) {
if (err) {
console.log(err);
return;
}
filenames.forEach(async function(filename) {
fs.readFile(dirname + "/" + filename, 'utf-8', function(err, content) {
if (err) {
console.log(err);
return;
}
if (content.includes('content string')) {
allResults.push(filename);
}
});
});
});
return allResults;
}
readFiles(dirname).then((res) => {
console.log(res);
})
我得到的结果是 []
所以我知道这是 promises 和异步函数的问题,然而,这不是我完全掌握的概念,尽管尝试了几种可能性的组合(new Promise()
,或 .then
, await
,或 readdirSync
和 readFileSync
) 我没有成功。
我错过了什么,所以它 return 仅在读取所有文件后才成为 allResults
数组?
您应该放弃回调语法并使用 fs.promises Api。这看起来干净多了
const fs = require("fs").promises;
const path = require("path");
const dirname = path.resolve("./results/");
async function readDir(dirname) {
const allResults = [];
try {
const files = await fs.readdir(dirname);
for (const fileName of files) {
try {
const content = await fs.readFile(`${dirname}/${fileName}`, {
encoding: "utf-8"
});
if (content.includes("content string")) {
allResults.push(fileName);
}
} catch (error) {
console.log(error.message);
}
}
return allResults;
} catch (error) {
console.log(error);
}
}
readDir(dirname).then(data => {
console.log(data);
});