[英]Get all files within a folder containing string, push filenames to array and return array using Node FS
如標題所述,我想從特定目錄中讀取所有文件並返回其內容中具有特定字符串的所有文件的名稱。
這是我的代碼到目前為止的樣子:
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); })
我得到的結果是[]
所以我知道這是承諾和異步功能的問題,但是,這不是我完全掌握的概念,盡管嘗試了幾種可能性的組合( new Promise()
或.then
、 await
或readdirSync
和readFileSync
)我有沒有成功。
我缺少什么以便它僅在讀取所有文件后才返回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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.