在Node中使用'fs'编写文件时出错

时间:2017-06-29 00:02:50

标签: node.js fs

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

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上运行

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

1 个答案:

答案 0 :(得分:1)

当你致电fs.writeFile()时,你必须传递一个文件名/路径:

  1. 路径中的父目录已存在。
  2. 路径/文件名仅包含对您的操作系统合法的字符。
  3. 除非您预先创建了目录:C:\Users\Ruslan\WebstormProjects\communication-system\client\6\28,否则您可能会失败。而且,如果这是在Windows上运行,那么您也无法在文件名中使用:

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

    // 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, ....)