首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fs.readdir忽略目录

fs.readdir忽略目录
EN

Stack Overflow用户
提问于 2017-01-05 03:51:57
回答 2查看 15.9K关注 0票数 19

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

代码语言:javascript
复制
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');
         }
       })
     })
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-09 18:54:32

使用带有选项{ withFileTypes: true }fs.readdirfs.readdirSync方法,然后使用dirent.isFile进行过滤(需要节点10.10+)。

同步版本

代码语言:javascript
复制
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

异步版本(使用async/await,需要节点11+)

代码语言:javascript
复制
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);
}

异步版本(带回调)

代码语言:javascript
复制
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
});
票数 36
EN

Stack Overflow用户

发布于 2017-01-05 04:07:46

请看迪拉里克的答案,因为它更完整:只有当所有文件名都包含'.txt‘扩展名时,我的答案才有效。

为什么不直接过滤掉以".txt“结尾的文件呢?

代码语言:javascript
复制
var fs = require("fs")
fs.readdirSync("./").filter(function(file) {
    if(file.indexOf(".txt")>-1)console.log(file)
})

我之前应该补充说,要获得这些文件的数组,需要将它们返回到一个数组中,如下所示。

代码语言:javascript
复制
var fs = require("fs")
let text_file_array = fs.readdirSync("./").filter(function(file) {
    if(file.indexOf(".txt")>-1) return file;
})

(编者注:当我只是在更正拼写错误时,为什么编辑需要至少6个字符,STACKOVERFLOW是STACKOVERFLOW SMH SMH。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41472161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档