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

그래서 웹 프로젝트가 있고 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\

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



답변

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

당신은 원합니다 HttpRuntime.AppDomainAppPath.

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


답변

이 코드를 사용하십시오.

 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("")도이 효과를 생성합니다.


답변