c获取当前程序的路径_LabVIEW编程技巧:如何处理生成EXE程序前后的路径不一致问题...

问题提出

使用LabVIEW编写应用程序时,相信很多小伙伴遇到过这样的问题,在VI程序中涉及到路径的问题时,比如在程序开始运行时,需要自动读取当前目录下某个文件的内容作为参数的初始配置,或者自动加载当前目录下某个子文件夹下所有的图片文件作为图标使用时,在这种情况下,我们一般使用LabVIEW中提供的“当前VI路径”函数获取当前程序的完整路径,进而得到当前程序所在的文件夹路径,在程序的开发环境下即生成EXE程序前,程序运行一切良好,但是当生成可执行的EXE程序后再运行,会提示路径不正确,找不到待读取或加载的文件。

这是怎么回事呢?

问题分析

其实,不同于其它的编程语言,在LabVIEW中使用“当前VI路径”函数获取当前程序的完整路径时,生成EXE前后其返回值是不一样的。

下面通过一个例子进行说明,例子前面板如下图所示:

b065bed64f3b6a7019be90fd194252a7.png

这个程序比较简单,就是在前面板上显示获取到的当前程序的完整路径和其所在的文件夹,其程序框图如下所示:

85a91b26017215f66a8dee1883a717d7.png

在上面程序框图中,使用“当前VI路径”函数获取当前程序的完整路径,然后使用“拆分路径”函数获取得到当前程序所在的文件夹。

将该程序保存在“E:est”目录下,然后生成EXE程序“Main.exe”,将该EXE程序也放在“E:est”目录下。

上面前面板图中显示了生成EXE程序前的运行情况,运行结果一切正常,但生成EXE后运行“Main.exe”程序时,其结果如下图所示:

ac11b42944694a7ce816b7ea14f2ef24.png

相对于生成EXE前,当前程序所在的文件夹由“E:est”变成了“E:estMain.exe”,当前程序的完整路径由“E:estMain.vi”变成了“E:estMain.exeMain.vi”,可见,在路径目录中,多了一级Main.exe,很明显,相同的程序代码在同一个目录下,EXE生成前后当前主程序所在的路径返回值发生了变化。

这种在程序中使用相对路径时,无论是在开发环境下运行还是在EXE情况下运行,都需要在不修改代码的前提下,能够正确得到当前主程序所在的文件夹名称,那么怎样修改程序实现我们的目的呢?

解决方案

对上面的程序框图稍作修改,如下图所示:

53647c308743060c6e711b90becd40c0.png

在获致当前程序所在文件夹时,其思路是,将“当前VI路径”函数的返回值(路径类型)转换为字符串后进行判断,然后分别处理。判断方法为使用“匹配模式”函数判断字符串中是否存在“.exe”,该函数的返回参数“匹配后偏移量”会返回其索引位置,该值在不同的情况下会有所不同。

若存在“.exe”,该值会大于0,对应于EXE模式下运行,此时需将传入的路径进行两次拆分路径处理。

若不存在“.exe”,则该值为-1,对应于开发环境下运行,此时只需将传入的路径进行一次拆分路径处理即可。

将修改后的程序生成EXE程序后,运行结果如下图所示:

6401479db009c95cfb72f91a3fb6ab5c.png

可见,修改程序后无论是在开发环境下还是在EXE程序运行模式下,都能得到正确的当前程序所在的路径。

总结

对于LabVIEW中如何处理生成EXE程序前后的路径不一致问题,本文给出了一种解决方案,当然,还有很多种其它方案,相比来说,这是一种最简单、易行的实现方法。

如果你觉得这篇文章对你有用的话,关注+收藏+点赞吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值