windows下nodejs遍历指定目录中的子文件路径

引入依赖

const fs = require('fs');
const path = require('path')
const { exec } = require('child_process');

封装函数

//读取盘符
//callback结果 倒序盘符Array
function showDiskLetter(callback) {
    var wmicResult = '';
    var command = exec('wmic logicaldisk get Caption,FileSystem', function(err, stdout, stderr) {
        if(err || stderr) {
            console.log("root path open failed" + err + stderr);
            callback(null);
            return;
        }
        wmicResult = stdout;
    });
    command.stdin.end();
    command.on('close', function(code) {
        var data = wmicResult.trim().split('\n');
        data.shift();
        for (let i = data.length - 1; i >= 0; i--) {
            let cap = data[i].trim().split(/\s+/g);
            if (cap.length < 2) {
                data.splice(i, 1);
            } else {
                data[i] = cap[0];
            }
        }
        data.reverse();
        callback(data);
    });
}

//遍历文件路径
function mapDirChild(dir, typeArr, finish) {
    if (Object.prototype.toString.call(typeArr) !== '[object Array]') {
        throw new Error('typeArr不是Array')
    }
    const isEmpty = typeArr.length === 0;
    fs.readdir(dir, function(err, files) {
        if (err) {
            finish && finish(null);
            return;
        }
        let arr = [], n = 0, lastNum = files.length - 1;
        files.forEach(function(filename, index) {
            let pathname = path.join(dir, filename);
            let suffix = filename.substring(filename.lastIndexOf('.') + 1).toUpperCase();
            fs.stat(pathname, (err, stats) => { // 读取文件信息
                if (!err && stats.isFile() && (isEmpty || (suffix && typeArr.indexOf(suffix) > -1))) {
                    arr.push(pathname);
                }
                if (n === lastNum) {
                    finish && finish(arr);
                }
                n++;
            });
        });
    });
}

/**
 * 遍历指定目录的直接子文件路径 倒序遍历盘符,找到指定目录后就不再从其他盘符下找
 * @param types 过滤的文件后缀,为空时遍历全部
 * @param callback 结果回调函数 callback(data)
 * @param basePath 遍历的目录,默认值为'/localvideo'
 */
function querySources (types, callback, basePath) {
    const base = basePath || '/localvideo';
    let typeArr = null;
    if (!types) {
        typeArr = [];
    } else if (Object.prototype.toString.call(types) === '[object Array]') {
        typeArr = types.slice();
        for (let i = 0; i < typeArr.length; i++) {
            typeArr[i] = typeArr[i].toString().toUpperCase();
        }
    } else if (typeof types === 'string') {
        typeArr = types.replace(/\s+/g, '').toUpperCase().split(',');
    } else {
        typeArr = types.toString().replace(/\s+/g, '').toUpperCase().split(',');
    }
    showDiskLetter(function (data) {
        if (!data) {
            data = ['K:', 'J:', 'I:', 'H:', 'G:', 'F:', 'E:', 'D:', 'C:'];
        }
        if (data.length === 0) {
            typeof callback === 'function' && callback([]);
            return;
        }
        let i = 0, len = data.length;
        let mapBack = function (arr) {
            if (arr) {
                typeof callback === 'function' && callback(arr);
            } else {
                i++;
                if (i === len) {
                    typeof callback === 'function' && callback([]);
                    return;
                }
                mapDirChild(data[i] + base, typeArr, mapBack);
            }
        };
        mapDirChild(data[i] + base, typeArr, mapBack);
    });
}

使用方法

querySources('  mp 4 ,  wmv,   pdf', function (data) {
            //处理资源路径
            console.log('处理资源路径', data);
        }, '/myvideos');

querySources(['mp4', 'pdf', 'txt'], function (data) {
            //处理资源路径
            console.log('处理资源路径', data);
        });

querySources('', function (data) {
            //处理资源路径
            console.log('处理资源路径', data);
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值