NodeJS异步、同步 创建多层文件夹

摘要:
fs.existsSync(dirpath)){varpathtmp;mode)){returnfalse;}returntrue;callback){callback=callback | | function(){};函数(callresult){if(callresult){callback(true);

同步:

//创建多层文件夹 同步
function mkdirsSync(dirpath, mode) { 
    if (!fs.existsSync(dirpath)) {
        var pathtmp;
        dirpath.split(path.sep).forEach(function(dirname) {
            if (pathtmp) {
                pathtmp = path.join(pathtmp, dirname);
            }
            else {
                pathtmp = dirname;
            }
            if (!fs.existsSync(pathtmp)) {
                if (!fs.mkdirSync(pathtmp, mode)) {
                    return false;
                }
            }
        });
    }
    return true; 
}

异步:

//创建多层文件夹 异步
function mkdirs(dirpath, mode, callback) {
    callback = callback ||
    function() {};

    fs.exists(dirpath,
    function(exitsmain) {
        if (!exitsmain) {
            //目录不存在
            var pathtmp;
            var pathlist = dirpath.split(path.sep);
            var pathlistlength = pathlist.length;
            var pathlistlengthseed = 0;

            mkdir_auto_next(mode, pathlist, pathlist.length,
            function(callresult) {
                if (callresult) {
                    callback(true);
                }
                else {
                    callback(false);
                }
            });

        }
        else {
            callback(true);
        }

    });
}

// 异步文件夹创建 递归方法
function mkdir_auto_next(mode, pathlist, pathlistlength, callback, pathlistlengthseed, pathtmp) {
    callback = callback ||
    function() {};
    if (pathlistlength > 0) {

        if (!pathlistlengthseed) {
            pathlistlengthseed = 0;
        }

        if (pathlistlengthseed >= pathlistlength) {
            callback(true);
        }
        else {

            if (pathtmp) {
                pathtmp = path.join(pathtmp, pathlist[pathlistlengthseed]);
            }
            else {
                pathtmp = pathlist[pathlistlengthseed];
            }

            fs.exists(pathtmp,
            function(exists) {
                if (!exists) {
                    fs.mkdir(pathtmp, mode,
                    function(isok) {
                        if (!isok) {
                            mkdir_auto_next(mode, pathlist, pathlistlength,
                            function(callresult) {
                                callback(callresult);
                            },
                            pathlistlengthseed + 1, pathtmp);
                        }
                        else {
                            callback(false);
                        }
                    });
                }
                else {
                    mkdir_auto_next(mode, pathlist, pathlistlength,
                    function(callresult) {
                        callback(callresult);
                    },
                    pathlistlengthseed + 1, pathtmp);
                }
            });

        }

    }
    else {
        callback(true);
    }

}

免责声明:文章转载自《NodeJS异步、同步 创建多层文件夹》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇sql server 数据类型jQuery中兄弟元素、子元素和父元素的获取下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mui 上传图片

mui前端传输文件 //上传图片 document.getElementById('photo').addEventListener('tap', function(e) { if (mui.os.plus) { var buttonTit = [{...

跨域请求方式之Jsonp形式

在浏览器端才有跨域安全限制一说,而在服务器端是没有跨域安全限制的。 在两个异构系统(开发语言不同)之间达到资源共享就需要发起一个跨域请求。 而浏览器的同源策略却限制了从一个源头的文档资源或脚本资源与来自另一个源头的资源进行交互。在请求协议、端口以及域名(主机)相同时才是同一个源,否则不是同一个源,js无法访问不是同源的资源。 通过js发起跨域请求需要进行改...

嵌入式&iOS:回调函数(C)与block(OC)回调对比

学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下。 C的回调函数: callBack.h 1)、定义一个回调函数的参数数量、类型。 typedef void (*CallBack)(int data_i32); 2)、声明一个外部函数指针。 extern CallBack myCallBackPTR; 3)、声明一个doSomeT...

多线程之旅六——异步编程模式,自己实现IAsyncResult

作为模式,只是一种大家认可的经验,模式可以作为大家交流的词汇而存在。下面我们就要介绍几种异步编程模式,AMP、EAP和TAP。当然,法无定法,在我们理解的基础上,我们可以根据具体情况适度修改。下面介绍的只是在通常情况下的两种模式会是以什么样子的形式出现。   一 模型简介 1.APM 异步编程模型 这种模式的特征是一些成对出现的方法,分别以Begin和En...

uni使用new image()获取图片信息报错

uni使用new image()报ReferenceError: Image is not defined或者获取不到对象 JS代码: var img = new Image(); // 创建对象 img.src = getBase64List; // 改变图片的src img.onload = function(e) { // 加载完成执行 c...

AngularJs学习笔记3-服务及过滤器

    距离上次别博客有有一段时间了,因为最近公司和个人事情比较多,也因为学习新的知识所以耽搁了,也有人说Angularjs1.5没有人用了,没必要分享,我个人感觉既然开头了我就坚持把他写完,对一些还在使用或者维护项目的朋友能有一些帮助吧;     服务:服务提供能够在应用的整个生命周期保持数据的方法,它能在控制器之间通信,且能保持数据的一致性。    ...