2010-08-06 5 views
11

에서 웹 사이트 폴더 외부 위치를 얻을 수는 Server.MapPath를 사용하는 방법, 나는 일반적으로 문서를로드 문서 폴더를 웹 사이트 폴더 밖으로 이동하여 현재 웹 사이트 폴더의 형제가되도록하고 싶습니다. 이렇게하면 문서를 훨씬 쉽게 유지할 수 있습니다.내 ASP.NET 사이트 (예 : XML) 문서를 사용하는 경우 ASP.NET

그러나 문서로드 코드를 재 작성하는 것은 다음과 같이 ASP.NET이 그것을 할 수 없다 '는 최상위 디렉토리 위의 출구'에서 불만의

Server.MapPath("../../Documents/MyDocument.xml") 

결과.

아무도 내가 웹 사이트 폴더 밖에있는 폴더의 위치를 ​​상대적으로 지정할 수있는 방법을 제안 할 수 있습니까? 분명한 배포 이유 때문에 절대 경로를 지정하고 싶지는 않습니다.

감사 데이비드

답변

25

당신이 알고있는 경우에이 링크는, 당신은 당신의 웹 루트의 실제 위치를 얻을 수 Server.MapPath을 사용할 수 있으며, 다음 Path class의 방법은 문서를 얻을 수 통로.

같은 거친되지 않은 코드 무언가에

: 내가 잘못 구문을 얻었으나, Path 클래스를 사용하면 실제 FS 경로가 아닌 웹 유형 경로를 재생 한 후 무엇을해야

webRootPath = Server.MapPath("~") 
docPath = Path.GetFullPath(Path.Combine(rootPath, "../Documents/MyDocument.xml")) 

죄송합니다.

방법이 실패한 이유는 Server.MapPath이 웹 서버에서 위치를 차지하고 서버 계층의 최상위 "상단"에 있기 때문에 지정한 위치가 유효하지 않기 때문입니다.

+0

예. 그것은 마치 하나처럼 보입니다. – David

+1

더 나은 방법은 IIS의 웹 사이트에 가상 디렉터리로 문서 폴더를 추가하는 것입니다. – David

+0

그럴 수 있습니다. 사용자가 이러한 문서에 액세스해야하는지 여부 (또는 원하는지 여부)는 실제로 다릅니다. 다운로드 할 필요가 없다면 가상 디렉토리로 가질 필요가 없습니다. 물론 다른 방법 (디렉토리에 대한 사용 권한 거부 등)을 확보 할 수는 있지만 관련 URL을 보유하지 않는 것이 항상 최상의 보안 방법입니다.Idon't는 당신의 사용법이 무엇인지에 관해 안다. 그래서이 문서 디렉토리가 무엇인지에 관해 더 많이 생각하지 않으면 나는 행동의 최고의 과정 (그리고 그 probabyl는 어떻게해서든지 별개의 질문이다)을 말하고 싶지 않다. :) – Chris

0

당신이 어딘가에 하드 드라이브의 위치를 ​​지정하려면

, 다음의 웹 환경에서 쉽게 사용할 수 없습니다. 파일의 크기와 양이 적 으면 디렉토리 안에 보관하고 ~/path를 사용하여 디렉토리를 가리 킵니다.

그러나 일부 경우에는 Request 개체를 사용했습니다. 더 방문은 웹 루트를 기준으로

http://msdn.microsoft.com/en-us/library/5d5940ad.aspx

5
docPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\Documents\MyDocument.xml"); 

AppDomain.BaseDirectory은 현재 웹 응용 프로그램 어셈블리 디렉토리 경로를 반환합니다. 당신은 어느 경우에 경로를 해결해야하는 경우

1

절대 또는 (심지어는 웹 응용 프로그램의 루트 폴더 외부)의 상대를 사용 : 물론

public static class WebExtesions 
{ 
    public static string ResolveServerPath(this HttpContextBase context, string path) { 
     bool isAbsolute = System.IO.Path.IsPathRooted(path); 
     string root = context.Server.MapPath("~"); 
     string absolutePath = isAbsolute ? 
            path : 
            Path.GetFullPath(Path.Combine(root, path)); 
     return absolutePath; 
    } 
} 
+0

@cleftherus 왜'this HttpContextBase context'에'this'가 필요한가요? – Chopo87

+1

@ Chopo87 내 경우에는 HttpContextBase의 하위 클래스 인 HttpContextWrapper 클래스 (Asp.Net MVC)로 작업하고있었습니다. 확장 메서드를 변경하여 HttpContext를 대신 사용할 수 있습니다. – cleftheris

+0

@cleftherus 감사합니다. 제 경우에는'HttpContext'를 사용할 것입니다. – Chopo87

관련 문제