Home>Article>Web Front-end> A brief discussion on fs.mkdir and fs.rmdir in Nodejs file module
This article will take you throughNodejsfile operations fs.mkdir and fs.rmdir. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.
[Recommended study: "nodejs Tutorial"]
fs.mkdir("a", function (err) { // 当a不存在的时候直接创建 a/b会报错 if (err) { console.log(err); return; } console.log("success...");//success });
Idea
According to "/ "Carry out cutting to generate array cache
index initial value = 1; perform slice(0, index) on the array corresponding to the path in sequence, intercept and join('/') into the path string currentPath
fs.stat is used to describe the status of the file. If the file does not exist, an error occurs
An error occurred the previous day and called fs.mkdir( currentPath, call yourself recursively);
The file exists and call yourself
Code implementation
function mkdir(pathStr, cb) { let pathList = pathStr.split("/"); // 递归调用fs.mkdir let index = 1; function make(err) { if (err) return cb(err); if (index === pathList.length + 1) return cb(); //每次 调用要将上次的已经生成的文件名做下次的目标文件, // 所以 slice(0, index) 第二参数也要 累加 //slice(0, index) 截取后join('/') 成字符串 let currentPath = pathList.slice(0, index++).join("/"); // console.log("pathList.slice(0,index)", pathList.slice(0, index)); fs.stat(currentPath, function (err) { if (err) { fs.mkdir(currentPath, make); console.log({ currentPath }); // 如果不存在,再创建 fs.mkdir(currentPath, make); } else { make(); } }); } make(); }
Test:
No error is reported at this time
mkdir("a/b/c/d", function (err) { if (err) console.log(err); console.log("success..."); });
Print effect
const fs = require("fs").promises; //node11后可以直接.promises const { existsSync } = require("fs"); async function mkdir(pathStr, cb) { let pathList = pathStr.split("/"); for (let i = 1; i <= pathList.length; i++) { let currentPath = pathList.slice(0, i).join("/"); if (!existsSync(currentPath)) { await fs.mkdir(currentPath); } } }The call will recursively call the tile then chain call
mkdir("a/b/c/d") .then(() => { console.log("创建成功"); }) .catch((err) => { console.log(err); });Print effect ##fs.rmdir file directory deletion
const fs = require("fs"); const path = require("path"); fs.rmdir("a", function (err) { console.log(err);//会报错 });
Use results (error report)
fs.rmdir enhanced version##Code implementation
function rmdir(dir, cb) { fs.stat(dir, function (err, statObj) { // 1:判断dir的文件信息 statObj 是目录还是 文件 if (statObj.isDirectory()) { // 1.1 读取文件夹fs.readdir 回调函数 里可以拿到文件夹读取结果 fs.readdir(dir, function (err, dirs) { // 遍历 文件夹中文件,path 拼接 父文件名称+ 子文件名称 dirs = dirs.map((item) => path.join(dir, item)); // 把目录里面 的拿出来,一个删除后 删除下一个 let index = 0; function step() { // 将子文件都删除完后,删除自己 if (index === dirs.length) return fs.rmdir(dir, cb); //删除第一个成功后 继续调用rmdir 删除下一个子文件,直到index===dirs.length 时 删除自己 rmdir(dirs[index++], step); } step(); }); } else { // 1.2 dir是文件 直接删除 用fs.unlink fs.unlink(dir, cb); } }); }
rmdir("a", function () { console.log("删除成功"); });
Execution result
Parallel version
const fs = require("fs").promises; const path = require("path"); async function rmdir(dir) { let statObj = await fs.stat(dir); if (statObj.isDirectory) { let dirs = await fs.readdir(dir); await Promise.all(dirs.map((item) => rmdir(path.join(dir, item)))); await fs.rmdir(dir); } else { return fs.unlink(dir); } }Call
rmdir("a").then(() => { console.log("并行删除成功"); });
Execution result
The difference between parallel and serial
The operation of the file directory is the operation of the tree structure data
Leave a hole for writing next time
Tree structure UnderstandingFor more programming-related knowledge, please visit:Programming Teaching! !
The above is the detailed content of A brief discussion on fs.mkdir and fs.rmdir in Nodejs file module. For more information, please follow other related articles on the PHP Chinese website!