使用 Electron 开发桌面应用的时候,通常我们会使用 app.getPath()
来获取一些常见的文件夹路径,比如下载目录。
但是我们偶尔会接到一些反馈,说我们无法正确获取到下载目录,也是就是 app.getPath('downloads')
出错,会返回一个错误信息
Failed to get 'download' path
一直以来我们也只是接到反馈,没有能够明白为什么会出错,直到昨天我在某个机器上碰到了有人修改了下载目录的路径,然后对应的磁盘移除之后,Electron 又抛出了这个错误, 我才意识到这个错误的根本原因。
猜测应该是 Electron 读取注册表内下载目录路径之后,会对这个文件夹做一下检查,然后因为这个路径已经不可读写,所以就抛出了错误。目前 Electron 开发团队对相关 bug 并没有做直接回应,也没计划修复,因此我们只能自己在应用内做一下保护。
getDownloadPath(): string {
try {
return app.getPath('downloads')
} catch (error) {
console.error('Failed to get \'download\' path', error)
const userInfo = os.userInfo()
return path.join(
userInfo.homedir,
'Downloads'
)
}
}
相关 issue: