1. 程式人生 > 其它 >Sb1:System.Environment.CurrentDirectory避坑指南

Sb1:System.Environment.CurrentDirectory避坑指南

最近工作中,要做個客戶端提醒的小工具;winform程式自然少不了要讀取和應用程式同一個目錄的配置檔案(不是exe.config檔案);

要讀取當前應用程式所在目錄我立馬想到了System.Environment.CurrentDirectory 來獲取當前工作目錄。程式執行似乎一切正常完美無缺;

到了第二天早上來上班一開機彈出:“讀取配置檔案丟失”。應用程式增加了開機自啟動。彈出這個訊息讀取配檔案失敗,立馬檢查應用程式目錄下的配置檔案是不是被自己刪了。一檢查發現檔案還在呀,退出程式重新執行

依然正常,沒有彈出讀取配置檔案丟失。然後就看看登錄檔裡開機啟動項的路徑不在我這個目錄嗎?看了看路徑檔案也都對呀。有點納悶了?登出電腦再啟動試試 依然如此 彈出配置檔案丟失。找不到原因直接將獲取的路

徑MessageBox下,程式執行發現路徑確實是這個路徑。

添加了MessageBox這個程式碼後繼續開機測試。開機發現彈出的當前目錄是C:\Windows\System32 一下子百思不得其解。心想難不成老子的程式跑到system32下去了嗎?檢查登錄檔和sysetm32並沒有我的應用程式。最後心想應該是獲取路徑的程式碼有問題。

經反覆測試發現System.Environment.CurrentDirectory確實是獲取當前目錄沒錯,但是如果A程式呼叫B程式 B程式裡使用了System.Environment.CurrentDirectory獲取目錄。那麼這個B程式裡獲取的這個目錄就不再是B的應用程式所在目錄了;而變成了A所在的目錄了。這也就不難發現我在開機時彈出的目錄是C:\Windows\System32 因為開機自啟動程式也是由windows的某個程序呼叫的。

所以如果winform程式要獲取當前應用程式所在目錄最好不要用System.Environment.CurrentDirectory。而改為:Application.StartupPath 應用程式啟動路徑 這樣不管誰呼叫它都沒問題。

剛解決問題隨筆記下~