在 Node 中使用 'fs' 写入文件时出错
Error writing a file using 'fs' in Node
我正在尝试使用以下函数写入文件:
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\client17_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
上发布了这个
编辑:确实是错误的文件名干扰了保存过程
当你调用 fs.writeFile()
时,你必须传递一个 filename/path:
- 路径中的父目录已经存在
- 其中 path/filename 仅包含对您的 OS 合法的字符。
除非您预先创建了目录:C:\Users\Ruslan\WebstormProjects\communication-system\client
,否则您可能会同时失败这两项操作。而且,如果这是 运行 on 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, ....)
我正在尝试使用以下函数写入文件:
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\client17_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
上发布了这个编辑:确实是错误的文件名干扰了保存过程
当你调用 fs.writeFile()
时,你必须传递一个 filename/path:
- 路径中的父目录已经存在
- 其中 path/filename 仅包含对您的 OS 合法的字符。
除非您预先创建了目录:C:\Users\Ruslan\WebstormProjects\communication-system\client
,否则您可能会同时失败这两项操作。而且,如果这是 运行 on 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, ....)