[小菜一碟] 檔案目前位置取得方法的不同,而不是不同的檔案目前位置取得方法。

這篇文章中網友的留言吸引了我的注意,.NET Framework 提供了至少三種取得檔案目前位置的方法:

  • AppDomain.CurrentDomain.BaseDirectory
  • System.Reflection.Assembly.GetExecutingAssembly().Location
  • System.IO.Directory.GetCurrentDirectory()

我還真不知道它們具體上的差異,趁這個機會做了一下實驗順便記錄下來,也提供給各位朋友參考。

我有一個 CurrentDirectoryTestLibrary.dll 以及一個 CurrentDirectoryTestConsole.exe,裡面某處都有實作一個 ShowResult() 方法,分別印出在各自組件底下 AppDomain.CurrentDomain.BaseDirectory、System.Reflection.Assembly.GetExecutingAssembly().Location、System.IO.Directory.GetCurrentDirectory() 這三個的結果。

然後由 CurrentDirectoryTestConsole.exe 動態載入 CurrentDirectoryTestLibrary.dll 透過 Reflection 的方式呼叫 CurrentDirectoryTestLibrary.dll 裡面的 ShowResult() 方法,程式碼如下:

接著我透過命令提示字元,在 C:\ 去執行位於 D:\ 的 CurrentDirectoryTestConsole.exe,這樣就可以看出這三種檔案目前位置取得方法的差異。

可以看到 AppDomain.CurrentDomain.BaseDirectory 是 CurrentDirectoryTestConsole.exe 的位置,而 System.Reflection.Assembly.GetExecutingAssembly().Location 則是各自組件的位置,最後 System.IO.Directory.GetCurrentDirectory() 全部都是 C:\,得到一個結論:

  • AppDomain.CurrentDomain.BaseDirectory:獲得的是執行的應用程式在哪裡
  • System.Reflection.Assembly.GetExecutingAssembly().Location:獲得的是目前執行的組件在哪裡
  • System.IO.Directory.GetCurrentDirectory():獲得的是在哪裡下執行指令

參考資料