Electron在Windows 10下无法写入文件:fs-extra outputFile方法报错
问题分析与解决方案
嘿,我一眼就揪出问题所在了——你生成的文件名里藏着Windows系统绝对不允许的特殊字符!咱们先看报错信息里的路径:C:\Users\josh\Downloads\2018-01-13_15:14:11.png,重点看15:14:11里的冒号(:),这在Windows里是用来区分盘符(比如C:)和路径的特殊符号,操作系统会把它当成路径分隔的一部分,自然找不到你要创建的文件了,和目录存不存在根本没关系。
你用moment().format('YYYY-MM-DD_HH:mm:ss')生成的文件名刚好带了冒号,这就是fs.outputFile失败的核心原因。
修复步骤
只需要修改时间格式化规则,把冒号换成Windows允许的字符就行,比如横杠(-)或者点(.):
const fs = require('fs-extra') const path = require('path') // 注意你原代码漏了引入path模块,必须加上! const app = require('electron').remote.app const moment = require('moment') let dataURL = this.$.canvas.toDataURL() // 把冒号替换成横杠,生成合法的Windows文件名 let filename = moment().format('YYYY-MM-DD_HH-mm-ss') + '.png' let buffer = Buffer.from(dataURL.replace('data:image/png;base64', ''), 'base64') // 推荐用Buffer.from替代new Buffer,更符合Node.js规范 let filepath = path.resolve(app.getPath('downloads'), filename) fs.outputFile(filepath, buffer, err => { if (err) { console.error(err) } else { console.log('文件写入成功啦!') } })
另外补充两个小细节:
- 原代码里没引入
path模块,直接用path.resolve会报错,一定要补上const path = require('path') - Node.js里
new Buffer()已经被废弃,建议用Buffer.from()替代,避免后续版本兼容问题
额外避坑提醒
Windows文件名禁用的字符包括:<, >, :, ", /, \, |, ?, *,以后生成文件名的时候记得避开这些字符哦。
内容的提问来源于stack exchange,提问作者posit labs
相关产品推荐
相关产品推荐

