Javascript fs.readdir忽略目录

Javascript fs.readdir忽略目录,javascript,node.js,readdir,Javascript,Node.js,Readdir,我想扫描文件夹,但忽略其中包含的所有文件夹/目录。(C:/folder/)中的所有文件都是.txt文件和其他文件夹,我只想扫描txt文件,忽略这些文件夹 app.get('/generatE', function (req, res) { const logsFolder = 'C:/folder/'; fs.readdir(logsFolder, (err, files) => { if (err) { res.send("[empty]"); r

我想扫描文件夹,但忽略其中包含的所有文件夹/目录。(C:/folder/)中的所有文件都是.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');
         }
       })
     })

请查看Dirria的答案,因为它更完整:我的答案只有在所有文件名都包含“.txt”扩展名时才有效。

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

我应该在前面添加,要获得这些文件的数组,您需要将它们返回到数组中,如下所示

var fs = require("fs")
let text_file_array = fs.readdirSync("./").filter(function(file) {
    if(file.indexOf(".txt")>-1) return file;
})
使用带有选项的或方法
{withFileTypes:true}
,然后使用(需要节点10.10+)进行过滤

同步版本 异步版本(使用
Async
/
wait
,需要节点11+) 异步版本(带回调)
你以前读过这个答案吗?或者使用ES6minus one进行
.filter(f=>f.includes(.txt”)
,因为它在一般情况下不起作用(当文件扩展名未知时)还有一个减1,因为它对没有扩展名的文件(如Dockerfile)不起作用。我修改了我的答案,警告可能的副作用。当目录名以
.txt
结尾时,它也不起作用。为什么使用dirents是正确的方法?使用统计数据有什么问题?虽然最初的问题是关于文件夹的,在windows环境中,我认为解决方案不是最正确的。除非有合理的理由不这样做(请告诉我)。即使文件夹可能会给你带来问题,但我向你保证,当程序遇到/dev/null套接字或其他非文件常量filesNames=dirents.filter(dirent=>dirent.isFile()).map(dirent=>dirent.name)时,它也会受到同样的支持和支持;完全同意@Griffin,我刚刚遇到一种情况,目录中包含多个符号链接
dirent.isSymbolicLink()==true
,在macOS上,当符号链接的源是一个文件时,一切正常工作,但一旦它是dir,我会得到一个错误
错误:EISDIR:目录上的非法操作,读取
,我必须通过递归调用过滤掉它们。
当符号链接的源是。。。一个目录。。。必须通过递归调用过滤掉它们
——实际上,
fs.stat()
对于这个用例更方便,它会自动跟随symlink。
var fs = require("fs")
let text_file_array = fs.readdirSync("./").filter(function(file) {
    if(file.indexOf(".txt")>-1) return file;
})
const fs = require('fs');
const dirents = fs.readdirSync(DIRECTORY_PATH, { withFileTypes: true });
const filesNames = dirents
    .filter(dirent => dirent.isFile())
    .map(dirent => dirent.name);
// use filesNames
import { promises as fs } from 'fs';

async function listFiles(directory) {
    const dirents = await fs.readdir(directory, { withFileTypes: true });
    return dirents
        .filter(dirent => dirent.isFile())
        .map(dirent => dirent.name);
}
const fs = require('fs');
fs.readdir(DIRECTORY_PATH, { withFileTypes: true }, (err, dirents) => {
    const filesNames = dirents
        .filter(dirent => dirent.isFile())
        .map(dirent => dirent.name);
    // use filesNames
});