您現在的位置是:首頁 > 音樂首頁音樂

對於LabVIEW程式為什麼生成EXE後,涉及到路徑的輸出不正確了?

由 編碼那些事 發表于 音樂2021-06-16
簡介問題提出使用LabVIEW編寫應用程式時,相信很多小夥伴遇到過這樣的問題,在VI程式中涉及到路徑的問題時,比如在程式開始執行時,需要自動讀取當前目錄下某個檔案的內容作為引數的初始配置,或者自動載入當前目錄下某個子資料夾下所有的圖片檔案作為圖

labview停止如何變成小圖示

問題提出

使用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程式前後的路徑不一致問題,本文給出了一種解決方案,當然,還有很多種其它方案,相比來說,這是一種最簡單、易行的實現方法。

如果你覺得這篇文章對你有用的話,

關注

+

收藏

+

點贊

吧。