fs.readdir忽略目录

时间:2017-01-04 19:51:57

标签: javascript node.js readdir

我想扫描文件夹,但忽略其中包含的所有文件夹/目录。我在(C:/文件夹/)中的所有内容都是.txt文件和其他文件夹,我只想扫描txt文件,并忽略文件夹。

app.get('/generatE', function (req, res) {
  const logsFolder = 'C:/folder/';
  fs.readdir(logsFolder, (err, files) => {
    if (err) {
      res.send("[empty]");
      return;
     }
     var lines = [];
     files.forEach(function(filename) {
       var logFileLines = fs.readFileSync (logsFolder + filename, 'ascii').toString().split("\n");

       logFileLines.forEach(function(logFileLine) {


         if(logFileLine.match(/.*AUDIT*./)) {
           lines.push(logFileLine+'\n');
         }
       })
     })

2 个答案:

答案 0 :(得分:9)

使用Node 10.10+获取目录(即忽略子目录)中所有文件的正确方法

const fs = require('fs');
const dirents = fs.readdirSync(<DIRECTORY_PATH>, { withFileTypes: true });
const filesNames = dirents
    .filter(dirent => !dirent.isDirectory())
    .map(dirent => dirent.name);
// use filesNames

我们使用fs.readdirSync方法,也使用dirent.isDirectory方法

答案 1 :(得分:2)

请参阅diraria的答案,因为它更完整:只有当所有文件名都包含“.txt”扩展名时,我的回答才有效。

为什么不过滤掉以“.txt”结尾的文件?

var fs = require("fs")
fs.readdirSync("./").filter(function(file) {
    if(file.indexOf(".txt")>-1)console.log(file)
})

我之前应该添加以获取这些文件的数组,您需要将它们返回到数组,如下所示。

var fs = require("fs")
let text_file_array = fs.readdirSync("./").filter(function(file) {
    if(file.indexOf(".txt")>-1) return file;
})