writeFile没有这样的文件或目录

时间:2016-01-15 12:35:30

标签: node.js fs

我有一个文件(This is a <a href="#">hyperlink. And so is this. ^--^ 31 43 47 图片),我想保存此图片。现在,在它之前存在具有相同名称​​的图像。如果是这样我想覆盖,或者如果之前不存在则创建它。我读到了国旗&#34; w&#34;应该这样做。

代码:

data.file

错误:

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

8 个答案:

答案 0 :(得分:67)

这可能是因为您尝试写入文件系统的根目录而不是您的应用程序目录'/avatar/myFile.png' - &gt; __dirname + '/avatar/myFile.png'应该做的伎俩,也检查文件夹是否存在。 node.js不会为您创建父文件夹。

答案 1 :(得分:9)

我们很多人都收到此错误,因为父路径不存在。例如。您有/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

或者如果您具有可以使用异步/等待的环境:

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

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

答案 2 :(得分:4)

我解决了类似的问题,我试图创建一个名称包含不允许的字符的文件。请注意这一点,因为它会给出相同的错误消息。

答案 3 :(得分:2)

实际上,Linux / Unix系统中不允许的文件名错误消息带有相同的错误,这非常令人困惑。请检查文件名是否包含任何保留字符。这些是Linux / Unix系统上保留的 /,>,<,|,::& 字符。要获得良好的阅读效果,请遵循此link

答案 4 :(得分:2)

您可以使用“ ./”作为路径的前缀。

在您的示例中,您将编写:

<div>

答案 5 :(得分:1)

就我而言,我使用异步fs.mkdir(),然后不等待此任务完成,我尝试创建文件fs.writeFile() ...

答案 6 :(得分:0)

在创建文件之前异步创建一些嵌套文件夹时,我遇到了此错误。在承诺开始写入文件之前,并非总是会创建目标文件夹。我通过使用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;
});

答案 7 :(得分:0)

出现此错误是因为我尝试运行:

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

在同一脚本中。在第二个writeFile调用中发生了异常。删除前两个呼叫即可解决问题。