首页/ 填坑/ 文章详情

Nodejs 递归式无限生成文件夹

nodejs 递归 文件夹 发布于 2020-10-22

在使用Electron开发桌面小应用时,根据每个新生用户,分配一个指定的文件夹,缓存该用户临时文件,需要一个动态生成文件夹功能。

Nodejs 生成文件夹,需要使用 fs 模块的exists 函数和mkdir函数, exists 函数判断文件夹是否存在,mkdir 函数直接生成文件夹。

生成用户的文件夹

JS var createUserFolder = function (path) {
    var fs = require("fs");  // 引入fs模块
    fs.exists(path, function(exists) { //判断文件夹是否存在
        if(exists) {
            console.log('文件夹已经存在');
            return false;
        }

        fs.mkdir(path,function(err) { //生成文件夹
            if(err){
                console.log('生成文件夹失败:'+err);
                return false;
            }
            console.log('生成文件夹成功');
        })
    });
}

createUserFolder('./archer'); //根目录生成archer的文件夹 

在根目录下生成每个用户文件夹,文件夹结构明显不合理,于是将它们统一存放在 user 文件夹下。调用 createUserFolder('./user/archer')发现无法正常生成文件夹,原来 mkdir 函数只能一层一层的生成文件夹,先有user文件夹,后有archer文件夹。

JScreateUserFolder('./user');
createUserFolder('./user/archer'); 
如果文件夹路径层次足够深,岂不要调用N次createUserFolder函数? 想想画面不要太美丽。

分析文件夹的路径组成部分,决定以 ‘/’ 为分层做断点,逐层拼接文件夹路径,先生成文件夹上一层的文件夹,直到没有找到‘/’分隔符。

递归式生成文件夹

JS var mkdirs = function(str,index) {
    var fs = require("fs");  // 引入fs模块
    var data = str.split('/');
    var len = base.getDataLength(data) - 1;
    var index = index || 1; //index默认1,指的是根目录,根目录已存在
    if(index > len) {
        return false;
    }

    var path = '';
    var regular = /(/*$)/g;
    for(var i= 0; i <= index; i++) {
        path += data[i]+'/';
    }

    if(!base.isEmptyValue(path)) {
        path = path.replace(regular,"");
    }

    fs.exists(path, function(exists) { //判断文件夹是否存在
        if(exists) {
            mkdirs(str,index+1);
            return false;
        }

        fs.mkdir(path,function(err) { //生成文件夹
            if(err){
                console.log('生成文件夹失败:'+err);
                return false;
            }

            mkdirs(str,index+1); //寻找下一层的文件夹
        })
    });
}

mkdirs('./user/archer'); 
使用递归方式查找,只要明确给出个终点,程序可无限的自动寻找下去,一步到位。

文章评论0 records

最新 最早

0

最新评论Latest comments

HentaiCatHentaiCat 2020-12-30 10:22
考科目二全程很紧张,考了三次才过,有次侧方入库直接pass,100分扣完,呜呜呜~
猫猫酱猫猫酱 2020-11-12 10:56
一入多肉深似海,说多都是泪
soulkunsoulkun 2020-11-05 15:54
IconFont的图标真的很好用!!!
无限链霉球菌无限链霉球菌 2020-11-03 11:41
药店,了解一下(`・ω・´)
HentaiCatHentaiCat 2020-11-02 15:28
(ಡωಡ)很实用,直接拿走...