[NodeJS]创建多级目录 - mkdir

数字银月渡
• 阅读 4330

环境: Ubuntu 16.04

下面两个方案都是采用异部方式进行目录创建,同步方式同理。

方式一、

import {promises as fs} from "fs";
import * as path from 'path';

/**
 * 读取路径信息
 * @param {string} path 路径
 */
 async function getStat(dir) {
   try {
    const stat = await fs.stat(dir);
    return stat;
   } catch (error) {
    return false;
   }
}

/**
  * 创建路径
  * @param {string} dir 路径
  */
function mkdir(dir) {
  return new Promise((resolve, reject) => {
    fs.mkdir(dir).then(function(){
      console.log('Directory created successfully:', dir);
      resolve(true)
    }).catch(function(){
      console.log('failed to create directory');
      resolve(false)
    })
  })
}

/**
  * 路径是否存在,不存在则创建
  * @param {string} dir 路径
  */
 export async function mkdirRecursions(dir) {
  let isExists = await getStat(dir);

  //如果该路径且不是文件,返回true
  if (isExists && isExists.isDirectory()) {
    return true;
  } 
  else if(isExists){
    return false;
  }
  //如果该路径不存在,拿到上级路径
  let tempDir = path.parse(dir).dir;
  //递归判断,如果上级目录也不存在,则会代码会在此处继续循环执行,直到目录存在
  let status = await mkdirRecursions(tempDir);
  let mkdirStatus;
  if (status) {
    mkdirStatus = await mkdir(dir);
  }
  return mkdirStatus;
}

// example1
//mkdirRecursions('./2019/1/2/3');

方式二

fs.mkdir('./2019/1/2/3', { recursive: true }).then(function(data){
  console.log(data)
}).catch(function(){
})

总结:

方式二是 v10.0.0 版本以后出现的,如果你版本>=v10.0.0,请使用官方的递归版本,否则使用方式一。

方式一从网上找来然后添加的自己项目,有部分修改。 网上版本是转载的,不知道出处是哪里,所以就没有标注。
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Ceph分布式存储部署过程
前言:  环境介绍:此次部署系统为Cenots7MON、OSD10.110.180.112AdminMON、OSD10.110.180.113Node1MON、OSD10.110.180.114Node2Ceph文件目录部署过程此部署过程是采用文件目录方式挂在激活OSD的方式部署Ceph集群。1.系统关闭
Stella981 Stella981
3年前
Linux下利用Docker搭建MYSQL5.7
引言本文旨在介绍如何在Linux使用Docker快速搭建一个MYSQL环境,用于日常的开发调试,有需要的朋友可参考一下。配置MYSQL1)创建mysql配置目录创建配置目录mkdir p /etc/mysql/conf.d/创建数据和日志目录mkdir pv /opt/my
Stella981 Stella981
3年前
Docker搭建Nexus(Maven私库)
0、镜像的查找:dockersearchnexus1、拉取官方镜像:dockerpullsonatype/nexus32、创建了自己的目录(/opt/nexus/nexusdata)  mkdir /opt/nexus/nexusdata&&chownR200 /opt/nexus/nexusdata3、运行容器
Stella981 Stella981
3年前
SVN目录结构的迭代约定
Subversion在创建项目的时候默认有两个目录结构选择:  第一种模式:svn://proj/|  第二种模式:svn://proj/|trunkbranchestags第一种模式是一种单一目录结构,集中式管理方式,适合于个人或者流程单一化的协作方式,且各自的创造都是相对隔离,很少存在同时两个人同时修改一个文件的现象。
Stella981 Stella981
3年前
Noark入门之线程模型
0x00单线程多进程单线程与单进程多线程的目的都是想尽可能的利用CPU,减少CPU的空闲时间,特别是多核环境,今天咱不做深度解读,跳过...0x01线程池锁最早的一部分游戏服务器是采用线程池的方式来处理玩家的业务请求,以达最大限度的利用多核优势来提高处理业务能力。但线程池同时也带来了并发问题,为了解决同一玩家多个业务请求不被
Easter79 Easter79
3年前
SVN目录结构的迭代约定
Subversion在创建项目的时候默认有两个目录结构选择:  第一种模式:svn://proj/|  第二种模式:svn://proj/|trunkbranchestags第一种模式是一种单一目录结构,集中式管理方式,适合于个人或者流程单一化的协作方式,且各自的创造都是相对隔离,很少存在同时两个人同时修改一个文件的现象。
Stella981 Stella981
3年前
RxJS的另外四种实现方式(六)——使用Stream类实现
接上一篇RxJS的另外四种实现方式(五)——使用生成器实现(https://my.oschina.net/langhuihui/blog/2120113)该实现方式与之前几种不同的,该实现方式仅针对Nodejs环境。在Nodejs环境中,提供了Stream类,包括Readable、Transform、Writeable等子类都是可扩展的。从字面
Stella981 Stella981
3年前
Linux挂载共享文件
mount方式挂载共享文件yuminstallcifsutils安装cifs工具包(用于取代被淘汰的smbfs)首先创建被挂载的目录:$mkdir/mnt/windows将共享文件夹挂载到windows文件夹:$sudomount.cifs //192.168.66.198/sharemnt/windows\