在 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.js——fs模块(文件系统),创建删除目录(文件),读取写入文件流