首页/ 填坑/ 文章详情

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

凡心的仙人凡心的仙人 03-18 14:35
谢谢你了!
rantrismrantrism 2023-04-03 11:27
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan 作者申
唐牛才是食神唐牛才是食神 2022-06-15 10:51
(*°▽°*)八(*°▽°*)♪,解决了
唐牛才是食神唐牛才是食神 2022-06-15 10:49
发现不得了的东西,今晚回去好好研究下...
胖螺胖螺 2022-02-04 00:58
( ゜- ゜)つロ 在写了在写了。看到也有些感慨。因为站长前年在我原博客的留言,让我毅然选择去深造,选择读研,曾经我想过挺多东西的,还是自己本专业的适合我自己。在这先表达感谢。新年快乐!