【问题标题】:Error writing a file using 'fs' in Node在 Node 中使用“fs”写入文件时出错
【发布时间】:2017-12-02 12:25:47
【问题描述】:

我正在尝试使用以下函数写入文件:

function writeFile (data, callback) {
var fs = require('fs');
var now = new Date();

fs.writeFile(now.toISOString() + ".json", data, function(err) {

    if (err) {
        return console.log(err);
    } else {
        console.log(true);
    }
});
}

但我收到这样的错误:

{ Error: ENOENT: no such file or directory, open 'C:\Users\Ruslan\WebstormProjects\communication-system\client\6\28\2017_19:47:55.json'
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'C:\\Users\\Me\\WebstormProjects\\blah-blah\\client\\6\\28\\2017_19:47:55.json' }

我每次运行程序时都尝试创建一个文件,但这似乎效果不佳,因为它说文件不存在。有什么我做错了吗?顺便说一句,我在 Windows 上运行它

编辑:确实是错误的文件名导致了保存过程

【问题讨论】:

标签: node.js fs


【解决方案1】:

当您调用fs.writeFile() 时,您必须将文件名/路径传递给它:

  1. 路径中的父目录已存在的位置。
  2. 路径/文件名仅包含对您的操作系统合法的字符。

除非您预先创建了目录:C:\Users\Ruslan\WebstormProjects\communication-system\client\6\28,否则您可能会在这两个方面都失败。而且,如果它在 Windows 上运行,那么您也不能在文件名中使用 :

假设您实际上希望路径为C:\Users\Ruslan\WebstormProjects\communication-system\client 以及基于now.toISOString() 的文件名,通常的解决方法是将路径分隔符和其他无效文件名字符替换为安全字符,以便您转换您的@ 987654326@ 总是一个安全的文件名。在这种情况下,您可以这样做:

// replace forward and back slashes and colons with an underscore
// to make sure this is a legal OS filename
let filename = now.toISOString().replace(/[\/\\:]/g, "_") + ".json";

fs.writeFile(filename, ....)

【讨论】:

  • 在正则表达式中添加了 g 标志,因为这是获取所有不适当字符所必需的。
猜你喜欢
  • 2016-12-15
  • 2020-12-11
  • 2016-08-20
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 2021-06-09
相关资源
最近更新 更多