2009-09-29 75 views
33

獲取當前應用程序的物理路徑我不能使用內的Application_Start

HttpContext.Current.Request.PhysicalApplicationPath 

因爲當時沒有請求對象來獲得內的Application_Start當前的物理路徑。

我還能如何獲得物理路徑?

+0

相關信息[這裏](https://stackoverflow.com/q/10951599/ 465053)。 – RBT 2017-11-14 10:30:03

回答

41
protected void Application_Start(object sender, EventArgs e) 
{ 
    string path = Server.MapPath("/"); 
    //or 
    string path2 = Server.MapPath("~"); 
    //depends on your application needs 

} 
+2

關於服務器路徑的更多信息:http://stackoverflow.com/a/275791/133665 – HuBeZa 2016-05-01 11:18:09

16

使用Server.MapPath("~")

     

+4

這比Server.MapPath(「/」);因爲Web應用程序的路徑可能與根應用程序的路徑不同。 – 2013-02-13 14:49:20

+9

而'HttpRuntime.AppDomainAppPath'比其中任何一個都更好,因爲它可以在包括靜態上下文的任何上下文中工作,而所有其他選項都需要通過'Server'屬性訪問'HttpServerUtility'實例,該屬性僅在諸如「Application_Start」之類的應用程序事件的上下文或活動的Web請求中。 – Triynko 2013-07-31 22:49:27

3

在C#中的Windows應用程序下面的代碼使用asp.net

application.startuppath

server.mappath()

22

您還可以使用

HttpRuntime.AppDomainAppVirtualPath 
+10

對於物理路徑,您實際上需要'HttpRuntime.AppDomainAppPath',它「獲取當前應用程序域中託管的應用程序的應用程序目錄的物理驅動器路徑。」 'HttpRuntime.AppDomainAppVirtualPath'實際上獲得了一個虛擬路徑,如「/ MyApp」。無論哪種方式,使用HttpRuntime是獲取應用程序物理路徑的最佳方式,因爲它在每個上下文中都可用,甚至在「HttpApplication」對象可用之前也包括靜態上下文。 – Triynko 2013-07-31 22:44:38

+1

此處發佈的其他解決方案需要通過「服務器」屬性訪問「HttpServerUtility」實例,該屬性僅在諸如「Application_Start」之類的應用程序事件的上下文或活動的Web請求中提供。 – Triynko 2013-07-31 22:47:32

+0

'HttpRuntime.AppDomainAppPath' – 2017-03-27 18:36:49

3

也有靜態 HostingEnvironment.MapPath

9

您可以使用此代碼:

AppDomain.CurrentDomain.BaseDirectory

2

System.AppDomain.CurrentDomain.BaseDirectory

這會給你你的應用程序的運行目錄。這甚至適用於Web應用程序。之後,您可以訪問您的文件。然而

1

有,所有這些選項,我發現這

之間細微的差別在於

如果你

string URL = Server.MapPath("~"); 

string URL = Server.MapPath("/"); 

string URL = HttpRuntime.AppDomainAppPath; 

您的網址將在您的鏈接顯示資源這樣的:

"file:///d:/InetPUB/HOME/Index/bin/Resources/HandlerDoc.htm" 

但是,如果你希望你的URL顯示沒有資源的位置,你應該做的

string URL = HttpRuntime.AppDomainAppVirtualPath; 

那麼只有虛擬路徑,您的網址顯示的資源虛擬路徑如下

"http://HOME/Index/bin/Resources/HandlerDoc.htm"   
16

我創建了一個帶有ASP的網站.Net WebForms,您可以在其中看到使用之前Azure中的站點響應中提到的所有表單的結果。

http://wfserverpaths.azurewebsites.net/

總結:


Server.MapPath("/") => D:\home\site\wwwroot\ 

Server.MapPath("~") => D:\home\site\wwwroot\ 

HttpRuntime.AppDomainAppPath => D:\home\site\wwwroot\ 

HttpRuntime.AppDomainAppVirtualPath =>/

AppDomain.CurrentDomain.BaseDirectory => D:\home\site\wwwroot\ 

HostingEnvironment.MapPath("/") => D:\home\site\wwwroot\ 

HostingEnvironment.MapPath("~") => D:\home\site\wwwroot\ 
+0

我如何獲得:\\ MYSERVER \的Inetpub \ wwwroot的\ MyFolder文件,而不是C:\的Inetpub \ wwwroot的\ MyFolder文件.... – Si8 2017-03-30 19:32:49

+1

選擇上述選項,寫這個小代碼: 'VAR pathComponents = AppDomain.CurrentDomain.BaseDirectory.Split(':'); pathComponents [0] = @「\\」+ System.Environment.MachineName; var resultPath = string.Join(「」,pathComponents);' – batressc 2017-07-11 16:20:54

2

最好的選擇是使用

AppDomain.CurrentDomain.BaseDirectory 

,因爲它是在保險觀測EM名稱空間,有沒有依賴的System.Web

這樣你的代碼會更便攜