目次
ケースの使用法
fs. mkdir の拡張バージョン
再帰バージョン
##for ループ await バージョン
#ケースの使用法
シリアル バージョン
Thinking
ホームページ ウェブフロントエンド jsチュートリアル Nodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明

Nodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明

Jun 22, 2021 am 10:29 AM
nodejs ファイル操作

この記事では、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
});
ログイン後にコピー
  • クロスレベルのディレクトリ存在しません ディレクトリの下にディレクトリを追加するときにエラーが発生しました! ! 、ノード自体の組み込みモジュールは、存在しないディレクトリの下に新しいディレクトリを追加することをサポートしていません(これが私がやりたいことです)

Nodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明

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...");
});
ログイン後にコピー

印刷効果

Nodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明

Nodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明

##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);
  });
ログイン後にコピー

印刷効果

Nodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明

Nodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明fs.rmdir ファイル ディレクトリの削除

#ケースの使用法

サブディレクトリのあるディレクトリ内の fs.rmdir を直接削除します
const fs = require("fs");
const path = require("path");
fs.rmdir("a", function (err) {
  console.log(err);//会报错
});
ログイン後にコピー
結果の使用 (エラー レポート)

fs.rmdir 拡張バージョンNodejs ファイル モジュールの fs.mkdir と 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("删除成功");
    });
    ログイン後にコピー

    実行結果

並列バージョン

コード実装Nodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明

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 についての簡単な説明

ファイル ディレクトリの動作の本質

ファイル ディレクトリの本質は次のとおりです。木構造データ

#ファイル ディレクトリの操作は木構造データの操作です

  • #次回書き込みのための穴を残しておきます

    ツリー構造の理解
  • #

プログラミング関連の知識について詳しくは、プログラミング教育をご覧ください。 !

以上がNodejs ファイル モジュールの fs.mkdir と fs.rmdir についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Jun 06, 2024 pm 05:14 PM

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

Nodejs はバックエンド フレームワークですか? Nodejs はバックエンド フレームワークですか? Apr 21, 2024 am 05:09 AM

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

Nodejsをmysqlデータベースに接続する方法 Nodejsをmysqlデータベースに接続する方法 Apr 21, 2024 am 06:13 AM

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

Nodejs インストール ディレクトリ内の npm ファイルと npm.cmd ファイルの違いは何ですか? Nodejs インストール ディレクトリ内の npm ファイルと npm.cmd ファイルの違いは何ですか? Apr 21, 2024 am 05:18 AM

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

Nodejsのグローバル変数とは何ですか Nodejsのグローバル変数とは何ですか Apr 21, 2024 am 04:54 AM

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

NodejsとJavaの間に大きな違いはありますか? NodejsとJavaの間に大きな違いはありますか? Apr 21, 2024 am 06:12 AM

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 は大規模なエンタープライズ アプリケーションに適しています。

Nodejs はバックエンド開発言語ですか? Nodejs はバックエンド開発言語ですか? Apr 21, 2024 am 05:09 AM

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

Nodejsプロジェクトをサーバーにデプロイする方法 Nodejsプロジェクトをサーバーにデプロイする方法 Apr 21, 2024 am 04:40 AM

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

See all articles