這篇文章帶大家了解一下Nodejs檔案操作fs.mkdir和fs.rmdir。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
【推薦學習:《nodejs 教學》】
fs.mkdir("a", function (err) { // 当a不存在的时候直接创建 a/b会报错 if (err) { console.log(err); return; } console.log("success...");//success });
#想法
對要新增的path路徑根據"/ "進行切割生成數組快取
index 初始值= 1;對路徑對應數組依序進行slice(0, index) 截取後join('/')成path字串currentPath
fs.stat 用來描述文件的狀態,如果不存在文件,就發生錯誤
上一天發生錯誤呼叫fs.mkdir( currentPath, 遞歸呼叫自己);
檔案存在呼叫自己
程式碼實作
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(); }
測試:
此時已經不報錯了
mkdir("a/b/c/d", function (err) { if (err) console.log(err); console.log("success..."); });
列印效果
實作想法
以'/'為基準切割路徑為對應數組,對陣列進行for迴圈遍歷
for迴圈內existsSync()以同步的方法偵測目錄是否存在。
如果目錄存在 傳回 true ,如果目錄不存在 傳回false 3. 不存在fs.mkdir(currentPath)
實作程式碼
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); } } }
呼叫將遞歸呼叫平鋪稱then 鍊式呼叫
mkdir("a/b/c/d") .then(() => { console.log("创建成功"); }) .catch((err) => { console.log(err); });
列印效果
對存在子目錄的目錄直接進行fs.rmdir刪除
const fs = require("fs"); const path = require("path"); fs.rmdir("a", function (err) { console.log(err);//会报错 });
使用結果(錯誤)
程式碼實作
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("删除成功"); });
執行結果
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); } }呼叫
rmdir("a").then(() => { console.log("并行删除成功"); });
更多程式相關知識,請造訪:程式設計教學! !
以上是淺談Nodejs檔案模組中的fs.mkdir和fs.rmdir的詳細內容。更多資訊請關注PHP中文網其他相關文章!