警惕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 應用程序啟動路徑 這樣不管誰調用它都沒問題。

剛解決問題隨筆記下~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM