fs.readdir 忽略目录
fs.readdir ignore directories
我想扫描文件夹,但忽略其中包含的所有 folders/directories。我在(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');
}
})
})
请参阅 diralik 的回答,因为它更完整:我的回答仅在所有文件名都包含“.txt”扩展名时有效。
为什么不过滤掉以“.txt”结尾的文件?
var fs = require("fs")
fs.readdirSync("./").filter(function(file) {
if(file.indexOf(".txt")>-1)console.log(file)
})
我之前应该补充说,要获得这些文件的数组,您需要将它们 return 到一个数组,如下所示。
var fs = require("fs")
let text_file_array = fs.readdirSync("./").filter(function(file) {
if(file.indexOf(".txt")>-1) return file;
})
使用 fs.readdir
or fs.readdirSync
method with options { withFileTypes: true }
and then do filtration using dirent.isFile
(需要 Node 10.10+)。
同步版本
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
,需要 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);
}
异步版本(带回调)
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
});
我想扫描文件夹,但忽略其中包含的所有 folders/directories。我在(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');
}
})
})
请参阅 diralik 的回答,因为它更完整:我的回答仅在所有文件名都包含“.txt”扩展名时有效。
为什么不过滤掉以“.txt”结尾的文件?
var fs = require("fs")
fs.readdirSync("./").filter(function(file) {
if(file.indexOf(".txt")>-1)console.log(file)
})
我之前应该补充说,要获得这些文件的数组,您需要将它们 return 到一个数组,如下所示。
var fs = require("fs")
let text_file_array = fs.readdirSync("./").filter(function(file) {
if(file.indexOf(".txt")>-1) return file;
})
使用 fs.readdir
or fs.readdirSync
method with options { withFileTypes: true }
and then do filtration using dirent.isFile
(需要 Node 10.10+)。
同步版本
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
,需要 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);
}
异步版本(带回调)
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
});