2009-09-29 14 views

Odpowiedz

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

} 
+2

Więcej informacji o ścieżce serwera: http://stackoverflow.com/a/275791/133665 – HuBeZa

16

Zastosowanie Server.MapPath("~")

     

+4

Działa to lepiej niż Server.MapPath ("/"); ponieważ ścieżka aplikacji internetowej może nie być taka sama jak aplikacja główna. –

+9

A 'HttpRuntime.AppDomainAppPath' działa lepiej niż którykolwiek z nich, ponieważ działa w dowolnym kontekście, w tym w kontekście statycznym, podczas gdy wszystkie inne opcje wymagają dostępu do instancji' HttpServerUtility' przez właściwość 'Server', która jest dostępna tylko w obrębie kontekst zdarzenia aplikacji, np. "Application_Start" lub w ramach aktywnego żądania internetowego. – Triynko

3

skorzystać z poniższego kodu

server.mappath() w ASP.NET

application.startuppath w aplikacji C# dla systemu Windows

22

Można również użyć

HttpRuntime.AppDomainAppVirtualPath 
+10

Dla ścieżki fizycznej, rzeczywiście potrzebujesz 'HttpRuntime.AppDomainAppPath', która" Pobiera fizyczną ścieżkę dysku katalogu aplikacji dla aplikacji hostowanej w bieżącej domenie aplikacji. " 'HttpRuntime.AppDomainAppVirtualPath' faktycznie otrzymuje ścieżkę wirtualną, taką jak"/MyApp ". Tak czy inaczej, używanie HttpRuntime jest najlepszym sposobem uzyskania fizycznej ścieżki aplikacji, ponieważ jest dostępna w każdym kontekście, w tym w kontekście statycznym, nawet przed udostępnieniem obiektu 'HttpApplication'. – Triynko

+1

Pozostałe opublikowane tutaj rozwiązania wymagają dostępu do instancji 'HttpServerUtility' za pośrednictwem właściwości' Server', która jest dostępna tylko w kontekście zdarzenia aplikacji, np. "Application_Start" lub w aktywnym żądaniu WWW. – Triynko

+0

'HttpRuntime.AppDomainAppPath' –

3

Istnieje również statyczne HostingEnvironment.MapPath

9

Można użyć tego kodu:

AppDomain.CurrentDomain.BaseDirectory

2

System.AppDomain.CurrentDomain.BaseDirectory

To daje katalog bieżący twojej aplikacji. Działa to nawet w przypadku aplikacji internetowych. Następnie możesz dotrzeć do swojego pliku.

1

Jest jednak drobna różnica między tych wszystkich opcji, które

I okazało się, że

Jeśli nie

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

lub

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

lub

string URL = HttpRuntime.AppDomainAppPath; 

adres URL spowoduje wyświetlenie zasobów w linku tak:

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

Ale jeśli chcesz, aby Twój adres URL, aby pokazać tylko ścieżkę wirtualną nie lokalizacja zasobów, należy zrobić

string URL = HttpRuntime.AppDomainAppVirtualPath; 

wtedy, twój URL wyświetla wirtualną ścieżkę do twoich zasobów, jak poniżej:

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

Stworzyłem stronę internetową z ASP .Net WebForms, w którym można zobaczyć wynik użycia wszystkich formularzy wymienionych w poprzednich odpowiedziach z witryny na Azure.

http://wfserverpaths.azurewebsites.net/

Podsumowanie:


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

Jak mogę uzyskać: \\ myserver \ inetpub \ wwwroot \ myfolder zamiast C: \ inetpub \ wwwroot \ myfolder .... – Si8

+1

Wybierz opcję powyżej i napisz ten mały kod: ' var pathComponents = AppDomain.CurrentDomain.BaseDirectory.Split (":"); pathComponents [0] = @ "\\" + System.Environment.MachineName; var resultPath = string.Join ("", pathComponents); ' – batressc

2

Najlepszy wybór korzysta

AppDomain.CurrentDomain.BaseDirectory 

bo to w sy em nazw i nie jest zależność do system.web

ten sposób Twój kod będzie bardziej przenośny

Powiązane problemy