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

首先,标题略长……

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

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

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

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

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

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

如上所述,由于需要加载外部配置文件并且不能把目录一锤定音写死,自然在.mlapp的脚本中需要涉及路径问题,一开始想用mfilename函数获取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开发客户端软件,愿世界和平!

经验分享 程序员 微信小程序 职场和发展