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