2011-08-11 220 views
5

獲取C#可執行文件運行路徑的最佳方法是什麼?C#可執行文件執行目錄

我需要使用它的臨時文件夾等,目前我使用:

Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) 

但後來我需要做:

.Replace("file:\\", string.Empty) 

,因爲這給了我一個URI路徑類型(即有一個文件:\在開始)這是我的代碼的其他部分無法使用。

回答

23
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 
+0

這是通過任何C#項目(winforms,wpf,控制檯等)獲取可執行文件路徑的唯一可靠方式,當然也是原始問題的最佳答案。但是,在這種情況下,它聽起來像是應該使用ApplicationData中的特定於應用程序的文件夾。我會避免使用臨時目錄,除非它是真正的臨時目錄(即:這些文件不會超過幾秒鐘或在特定過程中使用)。我經常清理我的臨時文件夾。 – wasatchwizard

+0

爲什麼你需要「Path.GetDirectoryName()」,Location屬性似乎已經提供了完整的路徑。 –

+1

@MikeK Location包含文件名,但僅需要目錄(請參閱此問題的標題);-) –

1

嘗試:

Application.StartupPath 

它應該返回的路徑不包括可執行文件的文件名。

+1

'Application.StartupPath'僅適用於WinForms(即:通過引用System.Windows.Forms程序集)。 。[鏈接](http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath(v = vs.110).aspx) – wasatchwizard

+0

是的,忘了提及,@wasatchwizard ,對您的評論+1。 – Rolice

3

試用Environment.CurrentDirectory 這將返回當前工作目錄的文件夾。

3

對於臨時文件夾等,請不要使用該目錄執行出於安全原因... MS有一些內置的是:

可以使用ApplicationData(漫遊用戶)或LocalApplicationData(非或者CommonApplicationData(對於非用戶相關的東西)Environment.SpecialFolder - 在這些文件夾中創建的任何東西(文件+文件夾)已經爲運行您應用的用戶設置了所需的權限/權限 - 沒有人管理員)可以去那裏...使它更加安全,你可以加密你放在那裏的數據...

看到http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

0

串executableLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly()。位置); string txtfile = Path.Combine(executableLocation,「example.txt」);

1

如果程序集已被陰影複製,則Assembly.Location將指向dll的陰影副本。

如果你想知道構建輸出目錄使用Assembly.CodeBase的位置,即:如果你想運行測試套件的時候,從組件的目錄訪問其他資源例如

Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath) 

有用。