wake-up-neo.net

writeFile keine solche Datei oder Verzeichnis

Ich habe eine Datei (data.file ein Bild), ich möchte dieses Bild speichern. Nun könnte ein Bild mit demselben Namen könnte davor existieren. Ich würde gerne überschreiben, wenn ja, oder erstellen, wenn es nicht schon vorher existiert. Ich habe gelesen, dass die Flagge "w" dies tun soll.

code:

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

error:

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

Dies ist wahrscheinlich darauf zurückzuführen, dass Sie versuchen, in das Stammverzeichnis des Dateisystems zu schreiben, anstatt in Ihr App-Verzeichnis. '/avatar/myFile.png' -> __dirname + '/avatar/myFile.png' sollte den Trick ausführen. node.js erstellt keinen übergeordneten Ordner für Sie.

58
SergeS

Viele von uns erhalten diesen Fehler, da parent path nicht vorhanden ist. Z.B. Sie haben /tmp-Verzeichnis zur Verfügung, aber es gibt keinen Ordner "foo" und Sie schreiben in /tmp/foo/bar.txt.

Um dies zu lösen, können Sie Folgendes verwenden:

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

Quelle und vollständige Diskussion: https://stackoverflow.com/a/16317628/1737158

Oder wenn Sie über eine Umgebung verfügen, in der Sie async/await verwenden können:

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

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

Ich habe ein ähnliches Problem gelöst, bei dem ich versuchte, eine Datei mit einem Namen zu erstellen, der unzulässige Zeichen enthielt. Achten Sie auch darauf, da es dieselbe Fehlermeldung gibt.

3
Svetlin Totev

Dieser Fehler ist aufgetreten, als ich einige verschachtelte Ordner direkt vor dem Erstellen der Dateien erstellt hat. Die Zielordner werden nicht immer erstellt, bevor die Dateien geschrieben werden. Ich habe dieses Problem gelöst, indem ich mkdirSync anstelle von 'mkdir' verwendet habe, um die Ordner synchron zu erstellen.

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 hatte diesen Fehler, weil ich versucht habe zu laufen:

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

im selben Skript. Die Ausnahme trat beim zweiten Aufruf von writeFile auf. Das Entfernen der ersten beiden Anrufe löste das Problem.

0
markemus

In der Fehlermeldung der Dateinamen, die in Linux/Unix-Systemen nicht zulässig sind, tritt der gleiche Fehler auf, der äußerst verwirrend ist. Bitte überprüfen Sie den Dateinamen, wenn er reservierte Zeichen enthält. Dies sind die reservierten /,>, <, |,:, & Zeichen für Linux/Unix-Systeme. Für eine gute Lektüre folgen Sie diesem link

0
Maruf