2010-07-16 204 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 2010-07-16 14:31:40

+0

我真的不在乎他们是否得到这个文件,它现在是一个测试项目。但是,谢谢你们的支持,因为这将最终生产。 – 2010-07-16 14:41:17

回答

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

为了解释,请参阅John Weldon的答案。 – 2010-07-16 14:30:07

+0

对于遇到此解决方案的MVC用户,请检查此问题是否有其他方法:http://stackoverflow.com/questions/4616646/specifying-relative-file-location-in-web-config-for-use-by-standard -c-sharp-clas – mao47 2014-01-09 18:39:20

3

GetWorkbook不是ASP.NET函数,它可能默认为调用它的进程启动的文件夹。这种情况下的过程是一个IIS进程,可能在该文件夹中启动。

+0

感谢您的解释。我不太熟悉ASP.net,所以这对我来说是新的。 – 2010-07-16 14:41:57

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

看看这个SO post了解更多关于Server.MapPath