57 # 目录操作

同步创建文件夹

const fs = require("fs");
fs.mkdirSync("a");

创建目录得保证父路径存在

fs.mkdirSync("a/b");

不然会报错
57 # 目录操作_第1张图片

下面实现没有父路径存在也能创建成功的方法

同步方法:

function mkdirSyncP(paths) {
    let arr = paths.split("/");
    for (let i = 0; i < arr.length; i++) {
        let currentPath = arr.slice(0, i + 1).join("/");
        console.log("mkdirSyncP---currentPath---->", currentPath);
        // 如果文件夹不存在就创建
        if (!fs.existsSync(currentPath)) {
            fs.mkdirSync(currentPath);
        }
    }
}

mkdirSyncP("a/b/c/d/e");

57 # 目录操作_第2张图片

异步方法:不会阻塞主线程

function mkdirP(paths, cb) {
    let arr = paths.split("/");
    let index = 0;
    function next() {
        // 如果路径不存在就停止创建
        if (index === arr.length) return cb();
        let currentPath = arr.slice(0, ++index).join("/");
        // fs.exists 被废弃,可以使用 fs.access 替代
        console.log("mkdirP---currentPath---->", currentPath);
        fs.access(currentPath, (err) => {
            // 没有文件夹就报错,报错就异步创建,不报错就 next
            if (err) {
                fs.mkdir(currentPath, next);
            } else {
                next();
            }
        });
    }
    next();
}

mkdirP("b/c/d/e/f/g", () => {
    console.log("异步创建成功");
});

57 # 目录操作_第3张图片

异步方式二:上面用来递归,下面使用 for 循环 + async await 实现

const fs2 = require("fs").promises;
async function mkdirP2(paths) {
    let arr = paths.split("/");
    for (let i = 0; i < arr.length; i++) {
        let currentPath = arr.slice(0, i + 1).join("/");
        console.log("mkdirP2---currentPath---->", currentPath);
        // 如果文件夹不存在就创建
        try {
            await fs2.access(currentPath);
        } catch (error) {
            console.log(error);
            await fs2.mkdir(currentPath);
        }
    }
}

mkdirP2("c/d/e/f");

57 # 目录操作_第4张图片

你可能感兴趣的:(Node,/,Node,框架,前端工程架构,fs)