2009-03-30 3 views
11

ASP.Net에는 웹을 통해 사용자가 액세스 할 수없는 app_data 폴더가 있습니다. 이 폴더에 파일을 저장하고 App_Code 폴더에있는 클래스를 사용하여이 파일을 읽으 려합니다.App_Code 폴더의 클래스에서 App_Data의 파일 액세스

여기서 현재 작업중인 디렉토리는 응용 프로그램 디렉토리가 아니라 "c : \", "c : \ windows \ system32 \"등과 같은 디렉토리입니다. 그래서 "../App_Data/somefile"과 같은 것은 작동하지 않습니다.

내가 App_Data 폴더 나는이 작업을 수행 할 수있는 방법, 프로그램

에있는 파일에 액세스하는 방법에 간과 간단한 무언가있을가?

답변

19

당신은 너무처럼 App_Data 폴더에 액세스 할 수 있습니다

string appdatafolder = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, "App_Data"); 

나는이 t를 사용하는 실현 그러나 HttpContext 객체를 사용자 정의 ASP.NET 멤버십 공급자 (이 코드를 여러 번 해보았습니다)에 작성하는 경우 HttpContext 객체를 사용하여 문제가 없어야합니다.

+4

고마워요, 바로 시작하자면 HttpContext.Current.Server.MapPath ("~/App_Data/myfilenamehere") 접근 방식이 더 읽기 쉬워 보였습니다. – Brian

+0

@Brian - 다행이야. MapPath 대 PhysicalApplicationPath의 성능에 대해서는 다음 링크를 참조하십시오. http://dotnetperls.com/Content/PhysicalApplicationPath.aspx 가끔씩 만 액세스하는 경우에는 문제가되지 않지만 성능 차이를 인식하는 것이 좋습니다. – CraigTP

6

당신은 컨텍스트 개체에 대한 액세스 권한이 없지만 그 이유는 분명하지 않습니다.

코드를 다음과 같이 컨텍스트에 액세스 할 수있는 요청에 대한 응답으로 실행하는 경우 : -

HttpContext.Current 

당신이 사용하는 응용 프로그램의 루트 물리적 경로를 얻을 수 실패 : -

HttpRuntime.AppDomainAppPath 
+0

내 수업은 웹 및 mvc 라이브러리에 대한 참조가없는 데이터 레이어에 있습니다. 이 데이터 클래스가 여전히 App_Data를 사용할 수 있습니까? HttpRuntime과 HttpContext는이 지속성 클래스가 웹 전개를 인식하도록합니다. 감사합니다 –

+0

@ one.beat.consumer : 네, 실제로 당신 자신의 질문에 대답했다고 생각합니다. – AnthonyWJones

+0

필자는 방금 부적절하게 물었습니다. 더 명확하게 말하면, 내 저장소 클래스가 System.Web 또는 다른 웹 라이브러리를 참조하지 않고 어떻게 App_Data 폴더에 쓸 수 있습니까? 이 폴더로 경로를 지정하는 다른 방법이 있습니까? –

관련 문제