2010-07-16 3 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

И для объяснения см. Ответ Джона Уэлдона. –

+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

Ваша заявка запущена в AppDomain, загруженном w3wp.exe, расположенной в каталоге вашей ошибки. Это означает, что попытка поиска любого файла начнется в этом каталоге. Вы должны использовать 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

Посмотрите на это SO post, чтобы узнать больше о Server.MapPath