Nodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明
この記事では、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);//会报错
});
ログイン後にコピー結果の使用 (エラー レポート)
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))
- #スプライスされたパス配列上で自分自身を再帰的に呼び出します #すべてのサブディレクトリを削除してから、それ自体を削除します
- ##コードの実装
- テスト実行結果
rmdir("a", function () { console.log("删除成功"); });
ログイン後にコピー
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); } }); }
並列バージョン
コード実装
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("并行删除成功");
});
ログイン後にコピー実行結果
パラレルとシリアルの違い
rmdir("a").then(() => { console.log("并行删除成功"); });
シリアルとは、単一スレッドは前の実行が完了した後にのみ次のスレッドを実行できることを意味すると理解されています。
並列、非同期実行、相互依存関係なし
そうすれば、後者の方が前者よりも効率的になります。
ファイル ディレクトリの動作の本質
ファイル ディレクトリの本質は次のとおりです。木構造データ#ファイル ディレクトリの操作は木構造データの操作です
-
#次回書き込みのための穴を残しておきます
ツリー構造の理解 #
プログラミング関連の知識について詳しくは、プログラミング教育をご覧ください。 !
以上がNodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 中国語版
中国語版、とても使いやすい

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Go ではファイルを安全に読み書きすることが重要です。ガイドラインには以下が含まれます。 ファイル権限の確認 遅延を使用してファイルを閉じる ファイル パスの検証 コンテキスト タイムアウトの使用 これらのガイドラインに従うことで、データのセキュリティとアプリケーションの堅牢性が確保されます。

Node.js は、高いパフォーマンス、スケーラビリティ、クロスプラットフォーム サポート、豊富なエコシステム、開発の容易さなどの機能を備えているため、バックエンド フレームワークとして使用できます。

MySQL データベースに接続するには、次の手順に従う必要があります。 mysql2 ドライバーをインストールします。 mysql2.createConnection() を使用して、ホスト アドレス、ポート、ユーザー名、パスワード、データベース名を含む接続オブジェクトを作成します。 connection.query() を使用してクエリを実行します。最後に connection.end() を使用して接続を終了します。

Node.js インストール ディレクトリには、npm と npm.cmd という 2 つの npm 関連ファイルがあります。違いは次のとおりです。拡張子が異なります。npm は実行可能ファイルで、npm.cmd はコマンド ウィンドウのショートカットです。 Windows ユーザー: npm.cmd はコマンド プロンプトから使用できますが、npm はコマンド ラインからのみ実行できます。互換性: npm.cmd は Windows システムに固有ですが、npm はクロスプラットフォームで使用できます。使用上の推奨事項: Windows ユーザーは npm.cmd を使用し、他のオペレーティング システムは npm を使用します。

Node.js には次のグローバル変数が存在します。 グローバル オブジェクト: グローバル コア モジュール: プロセス、コンソール、require ランタイム環境変数: __dirname、__filename、__line、__column 定数: unknown、null、NaN、Infinity、-Infinity

Node.js と Java の主な違いは、設計と機能です。 イベント駆動型とスレッド駆動型: Node.js はイベント駆動型で、Java はスレッド駆動型です。シングルスレッドとマルチスレッド: Node.js はシングルスレッドのイベント ループを使用し、Java はマルチスレッド アーキテクチャを使用します。ランタイム環境: Node.js は V8 JavaScript エンジン上で実行され、Java は JVM 上で実行されます。構文: Node.js は JavaScript 構文を使用し、Java は Java 構文を使用します。目的: Node.js は I/O 集中型のタスクに適しており、Java は大規模なエンタープライズ アプリケーションに適しています。

はい、Node.js はバックエンド開発言語です。これは、サーバー側のビジネス ロジックの処理、データベース接続の管理、API の提供などのバックエンド開発に使用されます。

Node.js プロジェクトのサーバー デプロイメント手順: デプロイメント環境を準備します。サーバー アクセスの取得、Node.js のインストール、Git リポジトリのセットアップ。アプリケーションをビルドする: npm run build を使用して、デプロイ可能なコードと依存関係を生成します。コードをサーバーにアップロードします: Git またはファイル転送プロトコル経由。依存関係をインストールする: サーバーに SSH で接続し、npm install を使用してアプリケーションの依存関係をインストールします。アプリケーションを開始します。node Index.js などのコマンドを使用してアプリケーションを開始するか、pm2 などのプロセス マネージャーを使用します。リバース プロキシの構成 (オプション): Nginx や Apache などのリバース プロキシを使用して、トラフィックをアプリケーションにルーティングします。
