web-dev-qa-db-ja.com

writeFileそのようなファイルまたはディレクトリはありません

ファイルがあります(data.file画像)、この画像を保存したいと思います。これで、同じ名前couldの画像がその前に存在します。上書きする場合は上書きするか、以前から存在しない場合は作成します。フラグ "w"でこれを行う必要があることを読みました。

コード:

            fs.writeFile('/avatar/myFile.png', data.file, {
                flag: "w"
            }, function (err) {
                if (err) {
                    return console.log(err);
                }
                console.log("The file was saved!");
            });

エラー:

{ [Error: ENOENT: no such file or directory, open '/avatar/myFile.png']
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '/avatar/myFile.png' }
32
Karl Morrison

これはおそらく、アプリディレクトリ'/avatar/myFile.png'-> __dirname + '/avatar/myFile.png'の代わりにファイルシステムのルートに書き込もうとしているためです。 node.jsは親フォルダーを作成しません。

70
SergeS

親パスが存在しないため、多くの人がこのエラーを受け取っています。例えば。あなたが持っている /tmpディレクトリーは使用可能ですが、フォルダー「foo」はなく、/tmp/foo/bar.txt

これを解決するには、次を使用できます。

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);
  });
}

ソースと完全な議論: https://stackoverflow.com/a/16317628/1737158

または、async/awaitを使用できる環境がある場合:

const mkdirp = require('mkdirp');
const fs = require('fs');

const writeFile = async (path, content) => {
  await mkdirp(path);
  fs.writeFileSync(path, content);
}
11
Lukas

許可されていない文字を含む名前のファイルを作成しようとしていた同様の問題を解決しました。同じエラーメッセージが表示されるため、同様に注意してください。

5
Svetlin Totev

実際、Linux/Unixシステムで許可されていないファイル名のエラーメッセージには、同じエラーが表示され、非常に混乱します。予約文字が含まれている場合は、ファイル名を確認してください。これらは、Linux/Unixの予約文字/、>、<、|、:、&文字です。システム。よく読むには、この link に従ってください。

2
Maruf

ファイルを作成する直前に入れ子になったフォルダーを非同期で作成すると、このエラーが発生しました。ファイルの書き込みが開始される前に、宛先フォルダーが作成されるとは限りません。フォルダーを同期的に作成するために、 'mkdir'の代わりにmkdirSyncを使用してこれを解決しました。

try {
    fs.mkdirSync(DestinationFolder, { recursive: true } );
} catch (e) {
    console.log('Cannot create folder ', e);
}
fs.writeFile(path.join(DestinationFolder, fileName), 'File Content Here', (err) => {
    if (err) throw err;
});
0
Ikansen

[〜#〜] i [〜#〜]実行しようとしたため、このエラーが発生しました。

fs.writeFile(file)
fs.unlink(file)
...lots of code... probably not async issue...
fs.writeFile(file)

同じスクリプトで。 2番目のwriteFile呼び出しで例外が発生しました。最初の2つの呼び出しを削除することで問題は解決しました。

0
markemus