這篇文章帶大家了解一下Nodejs檔案操作fs.mkdir和fs.rmdir。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
【推薦學習:《nodejs 教學》】
fs.mkdir檔案目錄新增
案例使用
- 逐級新增目錄會成功列印success
fs.mkdir("a", function (err) { // 当a不存在的时候直接创建 a/b会报错 if (err) { console.log(err); return; } console.log("success...");//success });
- 跨級在不存在的目錄下新增目錄報錯啦! ! ,node本身的內建模組是不支援不存在的目錄下新增目錄的(這就是我要幹的事)
fs. mkdir的加強版
遞迴版本
#想法
對要新增的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循環await版本
實作想法
以'/'為基準切割路徑為對應數組,對陣列進行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檔案目錄刪除
案例使用
對存在子目錄的目錄直接進行fs.rmdir刪除
const fs = require("fs"); const path = require("path"); fs.rmdir("a", function (err) { console.log(err);//会报错 });
使用結果(錯誤)
##fs.rmdir加強版
序列版本
想法- #fs.stat 會傳回檔案的具體資訊:檔案的狀態檔案的訊息,修改時間,創建時間,目錄狀態;fs.stat 的回呼裡第二參數是獲取到文件對象,對象的方法:isFile,isDirectory
- isFile 直接 fs.unlink (dir, cb);刪除目前檔案
- isDirectory 呼叫fs.readdir回傳子目錄組成的陣列
- 對子目錄陣列進行map遍歷&父檔案名稱子檔案名稱拼接path.join(dir, item))
- #對拼接過的path陣列依序進行遞迴呼叫自己
##子目錄全刪除後刪除本身
程式碼實作
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中文網其他相關文章!

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器