獲取C#可執行文件運行路徑的最佳方法是什麼?C#可執行文件執行目錄
我需要使用它的臨時文件夾等,目前我使用:
Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)
但後來我需要做:
.Replace("file:\\", string.Empty)
,因爲這給了我一個URI路徑類型(即有一個文件:\在開始)這是我的代碼的其他部分無法使用。
獲取C#可執行文件運行路徑的最佳方法是什麼?C#可執行文件執行目錄
我需要使用它的臨時文件夾等,目前我使用:
Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)
但後來我需要做:
.Replace("file:\\", string.Empty)
,因爲這給了我一個URI路徑類型(即有一個文件:\在開始)這是我的代碼的其他部分無法使用。
不能準確回答你的問題,但我會建議看看:
Path.GetTempFileName()
http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
這是通過任何C#項目(winforms,wpf,控制檯等)獲取可執行文件路徑的唯一可靠方式,當然也是原始問題的最佳答案。但是,在這種情況下,它聽起來像是應該使用ApplicationData中的特定於應用程序的文件夾。我會避免使用臨時目錄,除非它是真正的臨時目錄(即:這些文件不會超過幾秒鐘或在特定過程中使用)。我經常清理我的臨時文件夾。 – wasatchwizard
爲什麼你需要「Path.GetDirectoryName()」,Location屬性似乎已經提供了完整的路徑。 –
@MikeK Location包含文件名,但僅需要目錄(請參閱此問題的標題);-) –
嘗試:
Application.StartupPath
它應該返回的路徑不包括可執行文件的文件名。
'Application.StartupPath'僅適用於WinForms(即:通過引用System.Windows.Forms程序集)。 。[鏈接](http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath(v = vs.110).aspx) – wasatchwizard
是的,忘了提及,@wasatchwizard ,對您的評論+1。 – Rolice
試用Environment.CurrentDirectory
這將返回當前工作目錄的文件夾。
對於臨時文件夾等,請不要使用該目錄執行出於安全原因... MS有一些內置的是:
可以使用ApplicationData
(漫遊用戶)或LocalApplicationData
(非或者CommonApplicationData
(對於非用戶相關的東西)Environment.SpecialFolder
- 在這些文件夾中創建的任何東西(文件+文件夾)已經爲運行您應用的用戶設置了所需的權限/權限 - 沒有人管理員)可以去那裏...使它更加安全,你可以加密你放在那裏的數據...
看到http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx
串executableLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly()。位置); string txtfile = Path.Combine(executableLocation,「example.txt」);
如果程序集已被陰影複製,則Assembly.Location
將指向dll的陰影副本。
如果你想知道構建輸出目錄使用Assembly.CodeBase
的位置,即:如果你想運行測試套件的時候,從組件的目錄訪問其他資源例如
Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath)
有用。
我會說這*是準確的答案。臨時文件應該轉到臨時文件夾。這就是它的目的。 –
還有'Path.GetTempPath()'.. – wasatchwizard