Node.js通过PowerShell调用fs.writeFile无法创建新文件的问题排查
问题:Node.js fs.writeFile报错ENOENT:找不到文件或目录
我使用常用文本编辑器创建并保存了createFile.js文件,以管理员权限打开PowerShell命令行,执行node .\createFile.js时,出现错误提示:
Error: ENOENT: no such file or directory, open 'C:\ProgramData\BigObject File - 2023-5-15_15:37:4.json'
我的代码如下:
var fs = require('fs'); var workingDir = "C:\\ProgramData\\"; var bigObj = { "items": [] }; var data = JSON.stringify(bigObj); now = new Date(); fn = workingDir + 'BigObject File - ' + now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate() + '_'; fn += now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds() + '.json'; fs.writeFile(fn, data, (err)=> { if (err) throw err; console.log('File saved: '+fn); });
根据Node.js官方文档,使用fs.open或fs.writeFile应该能够创建新文件,但我仍遇到该错误,请问我忽略了什么关键点?
解决方法
- 文件名包含Windows系统非法字符:Windows不允许文件名中出现冒号(
:),你生成的文件名里用了时间中的冒号(比如15:37:4),这直接导致系统无法识别该文件路径,所以抛出ENOENT错误。 - 修改文件名中的非法字符:把时间部分的冒号替换成横杠(
-)或者下划线(_)这类合法字符即可。修改后的代码片段如下:
fn += now.getHours() + '-' + now.getMinutes() + '-' + now.getSeconds() + '.json';
- 注意事项:Windows文件名的非法字符包括
< > : " / \ | ? *,生成动态文件名时必须避开这些字符,否则都会出现类似的路径识别错误。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

