背景

有时项目里需要同时创建多层目录的功能,但低版本的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. K8S 资源收集和展示 top & DashBoard-UI

    一.前言 在近期的 K8S 开发调试的过程中,总会想知道 Node 或者 Pod 的更多信息.但 $ kubectl top node $ kubectl top pod 中的 top 操作符,需要 ...

  2. 磅日波浪分析4H 20190927

    磅日的短线调整预计在132结束 目前已显现出ABC调整末端. 未来预计开启第五浪升势 破前期反弹高点.

  3. Python math库和random库

    1.math库 >>> from math import * >>> 2*pi 6.283185307179586 >>> e 2.7182818 ...

  4. 死磕Lambda表达式(六):Consumer、Predicate、Function复合

    你的无畏来源于无知.--<三体> 在上一篇文章(传送门)中介绍了Comparator复合,这次我们来介绍一下其他的复合Lambda表达式. Consumer复合 Consumer接口中,有 ...

  5. captcha-killer burp验证码识别插件体验

    0x01 使用背景 在渗透测试和src挖洞碰到验证码不可绕过时,就会需要对存在验证码的登录表单进行爆破,以前一直使用PKav HTTP Fuzzer和伏羲验证码识别来爆破,但是两者都有缺点PKav H ...

  6. B 方块消消乐

    时间限制 : - MS   空间限制 : - KB  评测说明 : 1s,128m 问题描述 何老板在玩一款消消乐游戏,游戏虽然简单,何老板仍旧乐此不疲.游戏一开始有n个边长为1的方块叠成一个高为n的 ...

  7. python编程心得(1)

    1.创建字典     字典名 = {键名1:键值1,键名2:键值2,...}     sanguo = {"诸葛亮草船借箭":"满载而归","关公赴会 ...

  8. 在.NET Core中检查证书的到期日期

    在 NUnit 测试中,我需要检查证书的有效期. 下面的代码片段可用于使用自定义证书验证回调检查任何证书属性. 所有你需要做的就是在回调中读取你感兴趣的属性,这样你就可以在之后检查它们. DateTi ...

  9. 1020 Tree Traversals (25 分)

    Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...

  10. javascript入门 之 zTree(十四 增删查改)(二)

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - addNodes / editName / rem ...