Matlab App Designer编译打包exe后读取文件路径问题

2023-05-16

首先,标题略长……

其次,当你看到这个长长的标题并点进来的时候:bro,恭喜你终于找到了一个行之有效的解决方案!

~好了,下面我们言归正传。

关于MATLAB App Designer自身的介绍不是此文重点,不再赘述,相信来到这里的小伙伴都已经对其有了不同层次的认知。个人感觉,App Designer确实比其自家的前辈GUIDE更易用、高效、美观,但在软件工具开发层面,其依然无法和大众流行的Python、Jave、MS平台相比,主要体现在代码架构组织和编辑方式让人唉声叹气、打包软件运行效率低得让人欲哭无泪、软件BUG莫名其妙且百度不得其解、打包运行和开发模式下的错误南辕北辙……然而,吐槽虽是,但无法弃之。为了饭碗,一些奇葩的问题还是只能硬着头皮去搞,比如标题所述的问题。

先说下我的开发需求和环境:

1)系统软件:Win10+MATLAB2020a版本

2)工程目录:首先肯定有个.mlapp文件,里面一堆操作中会去调用.mlapp文件同级目录下(也即工程根目录)的配置文件(包括excel、子文件夹中txt等需要用户配置文件)

如上所述,由于需要加载外部配置文件并且不能把目录一锤定音写死,自然在.mlapp的脚本中需要涉及路径问题,一开始想用mfilename函数获取exe的当前路径,测试过程中发现:

在开发模式下,由于运行.mlapp前必须先将相关文件夹和文件添加到path(否则运行直接报错),因此隐藏了mfilename函数实际上无法获取exe绝对路径的问题(猜测脚本应该是在path目录里去找了);但是打包成exe文件后,不管是安装版还是免安装版,点击运行时却存在找不到配置文件的错误(友情多余提醒:需要在打包时勾选“输出日志文件”或“显示调试窗口”的方式才能捕捉到详细信息),因为此时matlab会把整个exe临时复制到以下目录(忘了截图了,只能凭印象了):“C:\Users\Administrator\AppData\Local\Temp\Administrator\MCRInstaller9.9\……”,也即系统默认的用户文件目录,所以此时自然也就找不到exe同目录下的其他文件了。

于是,开始了中文百度和英文谷歌,各种关键词花式组合搜了好几天,看到的搜索结果大概有以下几种:

1)很多说可以使用mfilename、path函数。

2)部分说可以使用cd、which等系统命令查找exe文件绝对目录。

3)部分说可以使用查找注册表的方式查找exe文件绝对目录……

最后一一测试,发现结果只有三个字:然并卵!

失败的过程就不啰嗦了,感兴趣的朋友可以去亲自体验。无奈之下,一边骂MATLAB软件开发生态的贫瘠,一边只能继续冥思苦想(随便瞎试),最后凭运气发现:

pwd命令可用!

是的,pwd命令在通过非快捷方式启动运行exe时,可以获取到exe所在绝对路径!

exe_abs_fullpath = pwd;

 所以,看到这的亲们,你们可以激动得动起你们的小手试一下了!

但是,无论怎么操作,发现windows平台上一个自始至终无法解决的问题:使用MATLAB自带打包工具打包的安装版的exe通过快捷方式或开始菜单启动时,pwd命令依然无法获取到exe所在目录……还有这种骚操作??谁的锅??只能说fck了!

但愿以后不再用MATLAB开发客户端软件,愿世界和平!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab App Designer编译打包exe后读取文件路径问题 的相关文章

随机推荐