背景

有时项目里需要同时创建多层目录的功能,但低版本的nodejs并没有提供快捷的api

尽管在v10.12.0版本 mkdir() 第二个参数支持recursive 参数,为true时能递归创建,但有版本不兼容问题。

因此还是自己写一个吧。

方案

 /**
* nodejs递归创建目录
*/
var fs = require('fs');
var path = require('path'); // 异步 网上版本, 但fs.exists()已经废弃了
function async(dirname, callback) {
fs.exists(dirname, (exists) => {
if (exists) callback();
else {
async(path.dirname(dirname), () => {
fs.mkdir(dirname, callback);
});
}
});
} // 异步 使用fs.stat()代替exists
function async(dirname, callback) {
fs.stat(dirname, (err, stat) => {
if (stat) callback();
else {
async(path.dirname(dirname), () => {
fs.mkdir(dirname, callback);
});
}
});
} // 同步 保证执行完成之后再执行后续操作
function sync(dirname) {
if (fs.existsSync(dirname)) {
return true;
}
if (sync(path.dirname(dirname))) {
fs.mkdirSync(dirname);
return true;
}
}
// test
function test() {
console.log('=====开始创建=====');
async('./a/bb/ccc/eeee', (err)=>{});
// sync('./a/bb/ccc/eeee', (err) => { });
console.log('=====创建结束=====');
} test()





[nodejs] 同步/异步创建多层目录的更多相关文章

  1. nodejs创建多层目录

    1. fs.mkdir不能一次创建多层目录,必须先创建上层目录,再创建下层目录 //同步 fs.mkdirSync("./tmp/"); fs.mkdirSync("./ ...

  2. MFC 创建多层目录

    创建多层目录 BOOL CTestToolCtr::CreateFolder(CString strNewFolder) { /************************************ ...

  3. Java File类 mkdir 不能创建多层目录,如果是多层,可以调mkdirs

    public static void createDir(String destDirName) { File dir = new File(destDirName); if (!dir.exists ...

  4. Java File类 mkdir 不能创建多层目录

    File f = new File("/home/jp/Upload"); if ((!f.exists()) || (!f.isDirectory())) {boolean re ...

  5. nodejs——避免判断创建多级目录

    基本概念 fs.exists已经弃用,可以使用fs.access判断文件夹是否存在,但是官方的建议是在进行文件操作前不要使用fs.access,官方推荐的方式的是直接进行文件操作,有错误再修改 不建议 ...

  6. python创建多层目录的方式

    将 os.mkdir 改成 os.makedirs(opDir) 哈.

  7. Node fs 创建多层文件夹

    一.dirname()方法 1. 获得路径当中最后一段文件或文件夹所在的路径.多次调用path.dirname将会逐层返回上级目录 var path=require("path") ...

  8. Java File文件操作 创建文件\目录,删除文件\目录

    Java手册 java.io 类 File java.lang.Object java.io.File 所有已实现的接口: Serializable, Comparable<File> p ...

  9. nodejs的child_process同步异步

    nodejs是一种单线程模型,但是,使用nodejs的child_process模块可以实现多进程任务.利用child_process可以创建子进程,实现子进程和主进程之间的通信. nodejs v0 ...

随机推荐

  1. coding++:事务管理 隔离级别

    在声明事务时,只需要通过value属性指定配置的事务管理器名即可,例如:@Transactional(value="transactionManagerPrimary"). 除了指 ...

  2. iOS 图片加载和处理

    一.图片显示 图片的显示分为三步:加载.解码.渲染.解码和渲染是由 UIKit 进行,通常我们操作的只有加载. 以 UIImageView 为例.当其显示在屏幕上时,需要 UIImage 作为数据源. ...

  3. linux进程和线程直接通信方式梳理

    对于linux的进程之间.线程直接的通信方式进行梳理,这些都属于基本知识,不过因为知识体系“年久失修”,需要重新总结汇总.

  4. 使用 Visual Studio 开发、测试和部署 Azure Functions(二)测试,部署

    1,引言 上一篇介绍了使用使用 Visual Studio 开发 "Azure Functions" 函数,此篇介绍 “Azure Functions” 的测试以及直接从 Vist ...

  5. Git版本控制 Git、github,gitlab相关操作

    目录 关于版本控制 版本管理工具 集中式管理 分布式管理 git版本管理 git介绍 软件安装 Git工作状态 原理流程步骤 git基本操作 对文件进行修改 分支 共享仓库 创建共享仓库: 共享仓库上 ...

  6. 51单片机内存条(64K)

    51单片机内存条扩展(64K) 设计时间:2015年 实现功能:51单片机SRAM扩展 51单片机64K内存条

  7. 感动,我终于学会了Java对数组求和

    前言 看到题目是不是有点疑问:你确定你没搞错?!数组求和???遍历一遍累加起来不就可以了吗??? 是的,你说的都对,都听你的,但是我说的就是数组求和,并且我也确实是刚刚学会.╮(╯▽╰)╭ 继续看下去 ...

  8. MTK Android 回调机制[CallBack]

    具体步骤: 一.建模 回调函数的关键是:将一段代码作为参数传递,而这段代码将会在某个时刻被执行 我理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,然后注册到你这里,然后我就去 ...

  9. DevEco Toolkit使用指南--平行视界

      高效开发和创新业务是开发者一直追求的目标,当接到开发需求时,如果可以找到现成的API调用,能为开发者节省大把时间,将会留有更多的时间进行业务的创新.华为DevEcoToolkit聚合了华为丰富的开 ...

  10. "为文本添加下划线"组件:<u> —— 快应用组件库H-UI

     <import name="u" src="../Common/ui/h-ui/text/c_tag_underline"></impor ...