.NET 웹 애플리케이션에서 현재 디렉토리 가져 오기


105

그래서 웹 프로젝트가 있고 c # 방법을 사용하여 웹 사이트의 루트 디렉토리를 얻으려고합니다 Directory.GetCurrentDirectory(). 앞으로 파일 위치가 변경 될 것이므로 정적 경로를 사용하고 싶지 않습니다. 이 메서드는 내 imageProcess.aspx.cs 파일에서 실행 중이지만 반환 될 것이라고 생각한 위치 :

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

나는 대신 얻는다 :

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

왜 이런 일이 발생하고 가능한 해결책이 무엇인지 설명 할 수 있습니까? 감사합니다.


관련 포스트 여기에 일반적으로 닷넷 응용 프로그램의 실행 경로에 대해 이야기합니다.
RBT

답변:


210

현재 디렉토리는 시스템 레벨 기능입니다. 서버가 시작된 디렉토리를 반환합니다. 웹 사이트와는 아무 관련이 없습니다.

당신은 원합니다 HttpRuntime.AppDomainAppPath.

HTTP 요청에있는 경우 Server.MapPath("~/Whatever").


2
감사. 실제로를 찾고 HttpRuntime.BinDirectory있었지만 답변에서 언급 한 것을 시도한 후에는 디버거에서 쉽게 결정할 수있었습니다.
Kent Weigel 2016

`Server.MapPath ( "~ Whatever")를 사용하고 IIS 사이트가 myserver 에서 호스팅되는 경우 . myserver / Whatever 폴더가 아닌 C : \\ somefolder \ Whatever가 표시됩니다.
Si8

@ Si8 : 예; 그게 뭐죠 Server.MapPath. 당신은 stackoverflow.com/q/5823847/34397을
SLaks

2
.NET 어셈블리에 익숙하지 않거나 직접 실행 창에있는 경우 전체 명령은 다음 System.Web.HttpRuntime.AppDomainAppPath과 같습니다.System.Web.HttpRuntime.HttpContext.Server.MapPath("~")
testpattern

2
@testpattern HttpContext되고 System.Web.HttpContext.Current.Server.MapPath("~"),하지HttpRuntime
chengzi

112

이 코드를 사용하십시오.

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

자세한 참조 :

Server.MapPath 물리적 디렉터리에 매핑 할 상대 또는 가상 경로를 지정합니다.

  • Server.MapPath(".") 실행중인 파일 (예 : aspx)의 현재 물리적 디렉토리를 반환합니다.
  • Server.MapPath("..") 부모 디렉터리를 반환
  • Server.MapPath("~") 응용 프로그램의 루트에 대한 물리적 경로를 반환합니다.
  • Server.MapPath("/") 도메인 이름의 루트에 대한 물리적 경로를 반환합니다 (응용 프로그램의 루트와 반드시 동일하지는 않음)

예 :

웹 사이트 응용 프로그램 ( http://www.example.com/ )을 지정 했다고 가정 해 보겠습니다.

C:\Inetpub\wwwroot

상점 응용 프로그램 (IIS의 가상 디렉터리로 하위 웹, 응용 프로그램으로 표시됨)을

D:\WebApps\shop

예를 들어 Server.MapPath다음 요청 을 호출 하는 경우 :

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

그때:

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

Path가 정방향 (/) 또는 역 슬래시 ()로 시작하면 MapPath메서드는 Path가 전체 가상 경로 인 것처럼 경로를 반환합니다.

Path가 슬래시로 시작하지 않으면 MapPath메서드는 처리중인 요청의 디렉터리에 상대적인 경로를 반환합니다.

참고 : C #에서 @는 그대로 사용 된 문자열 연산자이며 이스케이프 시퀀스에 대해 처리되지 않아야 함을 의미합니다.

각주

Server.MapPath(null)Server.MapPath("")도이 효과를 생성합니다.



3
@GGO 좋은 링크! 링크를 따라, 나는 일을 결국 System.Web.Hosting.HostingEnvironment.MapPath("~")에 종속와 함께, 잘 작동하는 대신에System.Web.HttpContext.Current
최대 Barraclough
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.