1. ホーム
  2. node.js

[解決済み] 親フォルダが存在しない場合のファイル書き込み方法について教えてください。

2022-09-28 13:18:36

質問

以下のパスにファイルを書き込む必要があります。

fs.writeFile('/folder1/folder2/file.txt', 'content', function () {…});

しかし '/folder1/folder2' のパスが存在しない可能性があります。ということで、以下のようなエラーが発生します。

message=ENOENT, open /folder1/folder2/file.txt

そのパスにコンテンツを書き込むにはどうしたらよいでしょうか。

どのように解決するのですか?

Node v10 の時点で、これは fs.mkdir 関数に組み込まれており、これを パス.ディレクトリ名 :

var fs = require('fs');
var getDirName = require('path').dirname;

function writeFile(path, contents, cb) {
  fs.mkdir(getDirName(path), { recursive: true}, function (err) {
    if (err) return cb(err);

    fs.writeFile(path, contents, cb);
  });
}

古いバージョンでは mkdirp :

var mkdirp = require('mkdirp');
var fs = require('fs');
var getDirName = require('path').dirname;

function writeFile(path, contents, cb) {
  mkdirp(getDirName(path), function (err) {
    if (err) return cb(err);
    
    fs.writeFile(path, contents, cb);
  });
}

パス全体がすでに存在する場合 mkdirp は無視されます。それ以外の場合は、見つからないディレクトリをすべて作成します。

このモジュールは、あなたが望むことをします。 https://npmjs.org/package/writefile . このモジュールは "writefile mkdirp" でググって出てきたものです。このモジュールはコールバックを受け取る代わりにプロミスを返すので、最初にプロミスについての入門書を読んでおいてください。実際に物事を複雑にしてしまうかもしれません。

私が与えた関数は、どんな場合でも動作します。