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