2012-06-08 14 views
78

Bir web projem var ve web sitesinin kök dizinini C# method Directory.GetCurrentDirectory() kullanarak almaya çalışıyorum. İleride dosya konumları değişeceğinden statik bir yol kullanmak istemiyorum. Bu yöntem benim imageProcess.aspx.cs dosyasında çalışıyor ama düşündüm nerede döneceğini:.NET web uygulamasında şu anki dizin alınılıyor

C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs 

yerine alıyorum:

C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\ 

kimse bu oluyor ve hangi neden açıklayabilir olası bir çözüm olabilir? Çok teşekkürler.

+0

İlgili post [burada] (https://stackoverflow.com/q/6041332/465053). Net uygulama yürütme yolları genel olarak bahseder. – RBT

+0

[.Net'deki web uygulamalarındaki sunucu harita yolları] hakkında bir başka mesaj (https://stackoverflow.com/q/275781/465053) – RBT

cevap

155

Geçerli dizin sistem düzeyinde bir özelliktir; sunucunun başlatıldığı dizini döndürür. Web sitesiyle ilgisi yok.

HttpRuntime.AppDomainAppPath'u istiyorsunuz.

HTTP isteğinde iseniz, Server.MapPath("~/Whatever") numaralı telefonu da arayabilirsiniz.

+0

Teşekkürler. Ben aslında HttpRuntime.BinDirectory 'ı arıyordum, ama cevabınızda bahsettiğiniz şeyi denediğimde hata ayıklayıcısını belirlemek kolaydı. –

+0

'Server.MapPath ("~ Whatever") kullanıyorum ve IIS sitesi http: // myserver'da barındırılıyorsa. Http: // myserver/Whatever klasöründen çok C: \\ somefolder \ Whatever olsun. – Si8

+0

@ Si8: Evet; Server.MapPath'ın yaptığı budur. Http://stackoverflow.com/q/5823847/34397 – SLaks

71

kullanın bu kod:

HttpContext.Current.Server.MapPath("~") 

Detaylı Referans:

Server.MapPath fiziksel bir dizine eşlemek için akraba veya sanal yolu belirtir.

  • Server.MapPath(".")

    dosyanın geçerli fiziksel dizini (örneğin aspx)
  • Server.MapPath("~") döner fiziksel yol uygulamanın köküne
  • Server.MapPath("..") döner üst dizin yürütülmektedir döndürür
  • Server.MapPath("/") döner etki alanı adının kökü fiziksel yolunun ( uygulamasının kökü ile aynı olması gerekmez)

Bir örnek:

Diyelim ki

C:\Inetpub\wwwroot 

için bir web sitesi uygulaması (http://www.example.com/) işaret etti ve içinde mağaza uygulamasını (uygulaması olarak işaretlenen IIS sanal dizine, gibi alt web) yüklü diyelim Örneğin

D:\WebApps\shop 

, aşağıdaki istekte Server.MapPath ararsanız:

Daha sonra
http://www.example.com/shop/products/GetProduct.aspx?id=2342 

: Yol tam, sanal yol sanki

Server.MapPath(".") returns D:\WebApps\shop\products 
Server.MapPath("..") returns D:\WebApps\shop 
Server.MapPath("~") returns D:\WebApps\shop 
Server.MapPath("/") returns C:\Inetpub\wwwroot 
Server.MapPath("/shop") returns D:\WebApps\shop 

Yol bir ileri (/) ya da geriye doğru eğik çizgi (ile başlar ise), MapPath yöntem yolu döndürür.

Yol bir eğik çizgi ile başlamıyorsa, MapPath yöntemi, işlenmekte olan isteğin dizinine göre bir yol döndürür.

Not: C# içinde @, dizenin "olduğu gibi" kullanılması ve kaçış dizileri için işlenmemesi gerektiği anlamında bir söz dizimi operatörüdür.

Dipnotlar

Server.MapPath(null) ve Server.MapPath("") da bu etkiyi üretecek.

+0

Mükemmel! Tam olarak aradığım şey ... –

+4

https://stackoverflow.com/questions/275781/server-mappath-server-mappath-server-mappath-server-mappath#275791 mükemmel kopyası – GGO