问题提出
使用LabVIEW编写应用程序时,相信很多小伙伴遇到过这样的问题,在VI程序中涉及到路径的问题时,比如在程序开始运行时,需要自动读取当前目录下某个文件的内容作为参数的初始配置,或者自动加载当前目录下某个子文件夹下所有的图片文件作为图标使用时,在这种情况下,我们一般使用LabVIEW中提供的“当前VI路径”函数获取当前程序的完整路径,进而得到当前程序所在的文件夹路径,在程序的开发环境下即生成EXE程序前,程序运行一切良好,但是当生成可执行的EXE程序后再运行,会提示路径不正确,找不到待读取或加载的文件。
这是怎么回事呢?
问题分析
其实,不同于其它的编程语言,在LabVIEW中使用“当前VI路径”函数获取当前程序的完整路径时,生成EXE前后其返回值是不一样的。
下面通过一个例子进行说明,例子前面板如下图所示:
这个程序比较简单,就是在前面板上显示获取到的当前程序的完整路径和其所在的文件夹,其程序框图如下所示:
在上面程序框图中,使用“当前VI路径”函数获取当前程序的完整路径,然后使用“拆分路径”函数获取得到当前程序所在的文件夹。
将该程序保存在“E:test”目录下,然后生成EXE程序“Main.exe”,将该EXE程序也放在“E:test”目录下。
上面前面板图中显示了生成EXE程序前的运行情况,运行结果一切正常,但生成EXE后运行“Main.exe”程序时,其结果如下图所示:
相对于生成EXE前,当前程序所在的文件夹由“E:test”变成了“E:testMain.exe”,当前程序的完整路径由“E:testMain.vi”变成了“E:testMain.exeMain.vi”,可见,在路径目录中,多了一级Main.exe,很明显,相同的程序代码在同一个目录下,EXE生成前后当前主程序所在的路径返回值发生了变化。
这种在程序中使用相对路径时,无论是在开发环境下运行还是在EXE情况下运行,都需要在不修改代码的前提下,能够正确得到当前主程序所在的文件夹名称,那么怎样修改程序实现我们的目的呢?
解决方案
对上面的程序框图稍作修改,如下图所示:
在获致当前程序所在文件夹时,其思路是,将“当前VI路径”函数的返回值(路径类型)转换为字符串后进行判断,然后分别处理。判断方法为使用“匹配模式”函数判断字符串中是否存在“.exe”,该函数的返回参数“匹配后偏移量”会返回其索引位置,该值在不同的情况下会有所不同。
若存在“.exe”,该值会大于0,对应于EXE模式下运行,此时需将传入的路径进行两次拆分路径处理。
若不存在“.exe”,则该值为-1,对应于开发环境下运行,此时只需将传入的路径进行一次拆分路径处理即可。
将修改后的程序生成EXE程序后,运行结果如下图所示:
可见,修改程序后无论是在开发环境下还是在EXE程序运行模式下,都能得到正确的当前程序所在的路径。
总结
对于LabVIEW中如何处理生成EXE程序前后的路径不一致问题,本文给出了一种解决方案,当然,还有很多种其它方案,相比来说,这是一种最简单、易行的实现方法。
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777