[NodeJS]创建多级目录 - mkdir
发布于 3 年前 作者 gocpplua 2783 次浏览 来自 分享

环境: 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,请使用官方的递归版本,否则使用方式一。

方式一从网上找来然后添加的自己项目,有部分修改。 网上版本是转载的,不知道出处是哪里,所以就没有标注。

回到顶部