LabVIEW編程技巧:如何處理生成EXE程序前後的路徑不一致問題

問題提出

使用LabVIEW編寫應用程序時,相信很多小夥伴遇到過這樣的問題,在VI程序中涉及到路徑的問題時,比如在程序開始運行時,需要自動讀取當前目錄下某個文件的內容作為參數的初始配置,或者自動加載當前目錄下某個子文件夾下所有的圖片文件作為圖標使用時,在這種情況下,我們一般使用LabVIEW中提供的“當前VI路徑”函數獲取當前程序的完整路徑,進而得到當前程序所在的文件夾路徑,在程序的開發環境下即生成EXE程序前,程序運行一切良好,但是當生成可執行的EXE程序後再運行,會提示路徑不正確,找不到待讀取或加載的文件。

這是怎麼回事呢?

問題分析

其實,不同於其它的編程語言,在LabVIEW中使用“當前VI路徑”函數獲取當前程序的完整路徑時,生成EXE前後其返回值是不一樣的。

下面通過一個例子進行說明,例子前面板如下圖所示:

LabVIEW編程技巧:如何處理生成EXE程序前後的路徑不一致問題


這個程序比較簡單,就是在前面板上顯示獲取到的當前程序的完整路徑和其所在的文件夾,其程序框圖如下所示:

LabVIEW編程技巧:如何處理生成EXE程序前後的路徑不一致問題


在上面程序框圖中,使用“當前VI路徑”函數獲取當前程序的完整路徑,然後使用“拆分路徑”函數獲取得到當前程序所在的文件夾。

將該程序保存在“E:\test”目錄下,然後生成EXE程序“Main.exe”,將該EXE程序也放在“E:\test”目錄下。

上面前面板圖中顯示了生成EXE程序前的運行情況,運行結果一切正常,但生成EXE後運行“Main.exe”程序時,其結果如下圖所示:

LabVIEW編程技巧:如何處理生成EXE程序前後的路徑不一致問題


相對於生成EXE前,當前程序所在的文件夾由“E:\test”變成了“E:\test\Main.exe”,當前程序的完整路徑由“E:\test\Main.vi”變成了“E:\test\Main.exe\Main.vi”,可見,在路徑目錄中,多了一級Main.exe,很明顯,相同的程序代碼在同一個目錄下,EXE生成前後當前主程序所在的路徑返回值發生了變化。

這種在程序中使用相對路徑時,無論是在開發環境下運行還是在EXE情況下運行,都需要在不修改代碼的前提下,能夠正確得到當前主程序所在的文件夾名稱,那麼怎樣修改程序實現我們的目的呢?

解決方案

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

LabVIEW編程技巧:如何處理生成EXE程序前後的路徑不一致問題


在獲致當前程序所在文件夾時,其思路是,將“當前VI路徑”函數的返回值(路徑類型)轉換為字符串後進行判斷,然後分別處理。判斷方法為使用“匹配模式”函數判斷字符串中是否存在“.exe”,該函數的返回參數“匹配後偏移量”會返回其索引位置,該值在不同的情況下會有所不同。

若存在“.exe”,該值會大於0,對應於EXE模式下運行,此時需將傳入的路徑進行兩次拆分路徑處理。

若不存在“.exe”,則該值為-1,對應於開發環境下運行,此時只需將傳入的路徑進行一次拆分路徑處理即可。

將修改後的程序生成EXE程序後,運行結果如下圖所示:

LabVIEW編程技巧:如何處理生成EXE程序前後的路徑不一致問題


可見,修改程序後無論是在開發環境下還是在EXE程序運行模式下,都能得到正確的當前程序所在的路徑。

總結

對於LabVIEW中如何處理生成EXE程序前後的路徑不一致問題,本文給出了一種解決方案,當然,還有很多種其它方案,相比來說,這是一種最簡單、易行的實現方法。

如果你覺得這篇文章對你有用的話,關注+收藏+點贊吧。


分享到:


相關文章: