WriteFile нет такого файла или каталога
У меня есть файл (data.file
изображение), я хотел бы сохранить это изображение. Теперь изображение с тем же именем может существовать до него. Я хотел бы переписать, если это так, или создать его, если он не существует с тех пор. Я читал, что флаг "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' }
Ответы
Ответ 1
Это, вероятно, из-за того, что вы пытаетесь записать в корневую файловую систему вместо своего каталога приложений '/avatar/myFile.png'
→ __dirname + '/avatar/myFile.png'
, чтобы сделать трюк, также проверьте, существует ли папка. node.js не создаст родительскую папку для вас.
Ответ 2
Многие из нас получают эту ошибку, потому что родительский путь не существует. Например, у вас есть каталог /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);
});
}
Источник и полное обсуждение: fooobar.com/questions/106518/...
Или, если у вас есть среда, в которой вы можете использовать async/await:
const mkdirp = require('mkdirp');
const fs = require('fs');
const writeFile = async (path, content) => {
await mkdirp(path);
fs.writeFileSync(path, content);
}
Ответ 3
Я решил аналогичную проблему, когда пытался создать файл с именем, содержащим символы, которые не разрешены. Следите за этим, потому что он дает то же сообщение об ошибке.
Ответ 4
На самом деле, сообщение об ошибке для имен файлов, которые не разрешены в системе Linux/Unix, приводит к той же самой ошибке, которая крайне запутывает. Пожалуйста, проверьте имя файла, если у него есть какие-либо из зарезервированных символов. Это зарезервированные символы /,>, <, |,: &, для системы Linux/Unix. Для хорошего чтения перейдите по этой ссылке.
Ответ 5
Я столкнулся с этой ошибкой при асинхронном создании некоторых вложенных папок непосредственно перед созданием файлов. Папки назначения не всегда будут создаваться до того, как начнутся записи файлов. Я решил это, используя mkdirSync
вместо mkdir для синхронного создания папок.
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;
});
Ответ 6
У меня была эта ошибка, потому что я пытался запустить:
fs.writeFile(file)
fs.unlink(file)
...lots of code... probably not async issue...
fs.writeFile(file)
в том же сценарии. writeFile
исключительная writeFile
при втором вызове writeFile
. Удаление первых двух звонков решило проблему.