この記事では、Nodejs ファイル操作 fs.mkdir および fs.rmdir について説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
[推奨学習:「nodejs チュートリアル 」]
Fs.mkdir ファイル ディレクトリが新たに追加されました
ケースの使用法
- ディレクトリをレベルごとに追加すると成功が正常に出力されます
fs.mkdir("a", function (err) { // 当a不存在的时候直接创建 a/b会报错 if (err) { console.log(err); return; } console.log("success...");//success });
- クロスレベルのディレクトリ存在しません ディレクトリの下にディレクトリを追加するときにエラーが発生しました! ! 、ノード自体の組み込みモジュールは、存在しないディレクトリの下に新しいディレクトリを追加することをサポートしていません(これが私がやりたいことです)
fs. mkdir の拡張バージョン
再帰バージョン
アイデア
「/」によると切り取って生成配列キャッシュ
index 初期値 = 1; パスに対応する配列に対してスライス(0, インデックス)を順番に実行し、インターセプトしてパス文字列 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); } } }
呼び出しはタイルを再帰的に呼び出してからチェーン呼び出しを行います
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 拡張バージョン
シリアル バージョン
Thinking
fs.stat はファイルの特定の情報を返します: ファイルのステータス情報、変更時刻、作成時刻、ディレクトリのステータス。fs.stat のコールバックの 2 番目のパラメータは、ファイル オブジェクト、オブジェクト メソッドを取得することです: isFile、isDirectory
isFile direct fs.unlink (dir, cb); 現在のファイルを削除します
isDirectory は fs.readdir を呼び出してサブディレクトリの配列を返します
サブディレクトリ配列をマップしますTraverse & 親ファイル名、子ファイル名、スプライス パス.join(dir, item))
- #スプライスされたパス配列上で自分自身を再帰的に呼び出します #すべてのサブディレクトリを削除してから、それ自体を削除します
- ##コードの実装
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 中国語 Web サイトの他の関連記事を参照してください。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
