I would like to scan the folder, but ignore all the folders/directories that are included in it. All I have in the (C:/folder/) are .txt files and other folders, I just want to scan the txt files, and ignore the folders.
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'); } }) })
Advertisement
Answer
Use fs.readdir
or fs.readdirSync
method with options { withFileTypes: true }
and then do filtration using dirent.isFile
(requires Node 10.10+).
Sync version
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 version (with async
/await
, requires Node 11+)
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); }
Async version (with callbacks)
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 });