Wails应用打包后运行报错:无法读取配置文件路径异常
用Wails开发的桌面应用,在开发环境通过wails dev能正常读取assets/config.json,但打包成exe后运行就报错”config file not found”。我按照文档把配置文件放到了assets目录,打包时也加了wails build --assets参数,这是哪里出问题了?
main.go里是这样读取文件的:
module.OnStartup(func() {
fs := app.FileSystem()
content, err := fs.ReadFile("config.json")
// ...错误处理代码
})
尝试过把路径改成绝对路径、相对路径都不行,wails.json里的assetPath配置也检查过没问题。是不是打包时assets目录没正确包含进去?有没有什么调试路径的方法?
报错的原因是
fs.ReadFile("config.json")这个调用在生产环境找不到文件。虽然你在wails.json里配置了assetPath,也用了wails build --assets参数,但代码里的读取逻辑需要调整。正确的做法是使用
app.EmbeddedFileSystem()来读取嵌入的资源文件。具体修改如下:module.OnStartup(func() {
fs := app.EmbeddedFileSystem()
content, err := fs.ReadFile("assets/config.json")
if err != nil {
log.Fatal("读取配置文件失败:", err)
}
// 正常处理逻辑
})
注意这里必须加上assets前缀,因为打包时是按照这个目录结构嵌入的。
调试这种路径问题有个小技巧,可以先列出所有嵌入文件看看:
这样就能确认打包后的文件是不是真的被打进去了。记得重新build后再测试,应该就没问题了。
建议你调整代码结构,利用Wails自带的嵌入式文件系统来处理:
这样做的好处是统一了开发和生产环境的文件读取方式,避免了环境差异导致的问题。记得在wails.json里保持assetPath配置为"assets",然后正常执行
wails build就可以了,不需要额外加参数。如果想调试打包后的文件路径,可以在程序启动时打印当前工作目录
os.Getwd(),通常你会发现生产环境的工作目录和预期的不一样,这也是为什么直接读取文件系统会失败的原因。说个题外话,这种环境差异确实挺烦人的,我自己也被坑过好几次。重构成统一使用嵌入式文件系统后,这类问题就少了很多。