有時,我們需要獲取應用程序所在目錄,以便實現某種功能(如上傳下載功能)。獲取目錄的方式多種多樣,也各有區別,在此歸納總結。
一、路徑獲取方法
1.AppDomain.CurrentDomain
// 獲取程序的基目錄。
System.AppDomain.CurrentDomain.BaseDirectory
// 獲取和設置包括該應用程序的目錄的名稱。
System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase

2.System.Diagnostics.Process
// 獲取模塊的完整路徑,包含文件名
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

3.System.Environment
// 獲取和設置當前目錄(該進程從中啟動的目錄)的完全限定目錄。
System.Environment.CurrentDirectory
4.System.IO.Directory
// 獲取應用程序的當前工作目錄,注意工作目錄是可以改變的,而不限定在程序所在目錄。
System.IO.Directory.GetCurrentDirectory()
E:\Programming\CoreTest\TestApi
5.其他特殊方法
WinForm
// 獲取啟動了應用程序的可執行文件的路徑。
System.Windows.Forms.Application.StartupPath
// 獲取啟動了應用程序的可執行文件的路徑及文件名
System.Windows.Forms.Application.ExecutablePath
AspNet
Hosting.HostingEnvironment

二、注意事項
1.在不同系統中,對字符串的處理可能會不一樣,尤其是一些特殊字符,如"\"。所以拼接目錄時,不要用字符串相加的方式,而是用方法接口,因為一般底層幫我們做了相關兼容。
例如:
不要使用 AppDomain.CurrentDomain.BaseDirectory + "\\myFiles";
而是使用 System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "myFiles");
2.根據發布部署方式和系統的不同,應用程序的具體目錄也會不同。如,不一定會存在bin目錄。所以,盡量不要自行拼接出已有的程序目錄來使用,而是基於程序目錄,自行創建目錄使用。
三、總結
除了Directory方式,其他方法都是本應用程序域的路徑。所以在使用中,因該盡量避免用Directory方式,除非本身有必須使用工作目錄的需求
