NET web uygulamasında geçerli dizini alma


105

Bu yüzden bir web projem var ve web sitesinin kök dizinini c # yöntemini kullanarak almaya çalışıyorum Directory.GetCurrentDirectory(). Dosya konumları gelecekte değişeceğinden statik bir yol kullanmak istemiyorum. Bu yöntem, imageProcess.aspx.cs dosyamda çalışıyor, ancak döneceğini düşündüğüm yerde:

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

Bunun yerine şunu alıyorum:

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

Bunun neden olduğunu ve olası bir çözümün ne olabileceğini kimse açıklayabilir mi? Çok teşekkürler.


Genel olarak .Net uygulama yürütme yollarından bahseden ilgili yazı burada .
RBT

Yanıtlar:


211

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

Sen istiyorsun HttpRuntime.AppDomainAppPath.

Bir HTTP isteği içindeyseniz, ayrıca arayabilirsiniz Server.MapPath("~/Whatever").


2
Teşekkürler. Aslında arıyordum HttpRuntime.BinDirectoryama cevabınızda bahsettiğiniz şeyi denedikten sonra hata ayıklayıcıda bunu belirlemek kolaydı.
Kent Weigel

`Server.MapPath (" ~ Ne olursa olsun ") kullanırsam ve IIS sitesi myserver'da barındırılıyorsa . Myserver / Whatever klasörü yerine bir C: \\ somefolder \ Whatever alıyorum .
Si8

@ Si8: Evet; bu ne Server.MapPathyapar. İstediğiniz stackoverflow.com/q/5823847/34397
SLaks

2
NET derlemelerine aşina değilseniz (veya Acil Pencerede System.Web.HttpRuntime.AppDomainAppPathSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
iseniz

2
@testpattern HttpContext, System.Web.HttpContext.Current.Server.MapPath("~")sahip değilHttpRuntime
chengzi

112

Bu kodu kullanın:

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

Ayrıntılı Referans:

Server.MapPath fiziksel bir dizine eşlenecek göreli veya sanal yolu belirtir.

  • Server.MapPath(".") çalıştırılan dosyanın (örneğin aspx) geçerli fiziksel dizinini döndürür
  • Server.MapPath("..") üst dizini döndürür
  • Server.MapPath("~") fiziksel yolu uygulamanın köküne döndürür
  • Server.MapPath("/") etki alanı adının köküne fiziksel yolu döndürür (uygulamanın kökü ile aynı olması gerekmez)

Bir örnek:

Bir web sitesi uygulamasını ( http://www.example.com/ ) şu adrese gösterdiğinizi varsayalım:

C:\Inetpub\wwwroot

ve mağaza uygulamanızı (IIS'de sanal dizin olarak alt web, uygulama olarak işaretlenmiş)

D:\WebApps\shop

Örneğin, Server.MapPathaşağıdaki talepte ararsanız :

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

sonra:

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, ileri (/) veya geriye eğik çizgi () ile başlıyorsa, MapPathyöntem , Yol tam, sanal bir yolmuş gibi bir yol döndürür.

Yol eğik çizgiyle başlamazsa, MapPathyöntem işlenmekte olan isteğin dizinine göre bir yol döndürür.

Not: C # 'da @ harfi harfine değişmez dize operatörüdür, yani dizenin "olduğu gibi" kullanılması ve kaçış dizileri için işlenmemesi gerekir.

Dipnotlar

Server.MapPath(null)ve Server.MapPath("")bu etkiyi de yaratacaktır.



3
@GGO İyi bağlantı! Bağlantıları takiben, System.Web.Hosting.HostingEnvironment.MapPath("~")bunun yerine, bağımlılık olmadan harika çalışanSystem.Web.HttpContext.Current
Max Barraclough
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.