在 Node 中使用“fs”写入文件时出错

Posted

技术标签:

【中文标题】在 Node 中使用“fs”写入文件时出错【英文标题】:Error writing a file using 'fs' in Node 【发布时间】: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 上运行它

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

【问题讨论】:

提示:冒号是 Windows 中文件名的无效字符 检查文件名中的字符 fs.writeFile in a promise, asynchronous-synchronous stuff的可能重复 How to write file if parent folder doesn't exist?的可能重复 问题是您正在尝试使用该调用创建构成名称的目录路径。 【参考方案1】:

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

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

除非您预先创建了目录: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 标志,因为这是获取所有不适当字符所必需的。

以上是关于在 Node 中使用“fs”写入文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

Node.js学习之路05——fs文件系统之文件的写入和读取

Node 读取 + 写入 + 路径问题

Node.js——fs模块(文件系统),创建删除目录(文件),读取写入文件流

node 文件操作 读取,写入 目录的写入读取 文件流 写入流 管道流 压缩 解压

Node fs模块同步读取写入追加

在 Node.js 中事务性地写入文件