2010-07-16 4 views
1

이것은 매우 간단해야하지만 작동하지 않습니다.ASP.net 상대 경로가 작동하지 않습니까?

내 프로젝트의 루트 아래에 파일이 있습니다. 나는 이것을 이렇게 부르고 싶다.

GetWorkbook("tplBud806_wRevenue.xls") 

프로젝트를 서버에 게시하고 실행하려고하면 서버에서 찾을 수 없다고 말합니다.

Could not find file 'c:\windows\system32\inetsrv\tplBud806_wRevenue.xls'. 

이것은 취해야 할 경로가 아닙니다. E : \ IIServer \ rootwww \ reports \ tplBud806_wRevenue.xls 아래에 있어야합니다.

나는 상대 경로가 프로젝트가 실행되는 경로에서 시작되었다고 생각했다. 나는 또한 시도했다.

GetWorkbook("/tplBud806_wRevenue.xls") 
GetWorkbook("\tplBud806_wRevenue.xls") 
GetWorkbook("~/tplBud806_wRevenue.xls") 
GetWorkbook("~\tplBud806_wRevenue.xls") 

일부 설정이 누락 되었습니까? 그것은 단순한 것이되어야합니다 ...

+0

사람들이 URL을 통해 파일에 직접 액세스 할 수있게 하시겠습니까? 그렇지 않은 경우 웹 사이트의 루트가 아닌 App_Data에 넣을 수 있습니다. – tvanfosson

+0

나는 그들이이 파일을 얻었는지 정말로 신경 쓰지 않는다. 지금은 시험 프로젝트이다. 그러나 이것이 결국 생산이 될 것이므로 머리를 가져 주셔서 감사합니다. –

답변

7
GetWorkBook(Server.MapPath("tplBud806_wRevenue.xls")); 
+0

그리고 설명을 보려면 John Weldon의 답변을 참조하십시오. –

+0

이 솔루션과 관련된 MVC 사용자의 경우이 질문에서 다른 방법을 확인하십시오. http://stackoverflow.com/questions/4616646/specifying-relative-file-location-in-web-config-for-use-by-standard -c-sharp-clas – mao47

3

GetWorkbook은 ASP.NET 기능이 아니며이 기능을 호출하는 프로세스가 시작된 폴더가 기본 설정 일 가능성이 높습니다. 이 경우 프로세스는 IIS 프로세스이며 아마도 해당 폴더에서 시작됩니다.

+0

설명해 주셔서 감사합니다. ASP.net에 익숙하지 않아서이게 나에게 새로운 것이다. –

1

응용 프로그램이 오류가있는 디렉터리에있는 w3wp.exe에 의해로드 된 AppDomain에서 실행되고 있습니다. 어떤 파일을 찾으려고하면 그 디렉토리에서 시작한다는 것을 의미합니다. 다른 사람들이 언급 한대로 Page.MapPath을 사용해야합니다. 응용 프로그램에 aspx가있는 폴더를 찾기 시작하도록 지시합니다.

1

GetWorkBook(Server.MapPath("~/tplBud806_wRevenue.xls")); .XLS 파일이 프로젝트의 루트에있는 경우.

ResolveURL()과 함께 ~을 사용하여 사이트의 URL에 액세스 할 수도 있습니다. 그래서 ~ 프로젝트의 루트 URL로 대체됩니다

예 :

ResolveURL("~\tplBud806_wRevenue.xls")

http://myproject.url/website/tplBud806_wRevenue.xls

당신이 당신의 예에서와 같이 디스크 액세스를해야하는 경우로 변환됩니다 사용 Server.MapPath

Look this this SO post에 대해 자세히 알아보기 Server.MapPath

관련 문제