【问题标题】:ASP.net relative paths not working?ASP.net 相对路径不起作用?
【发布时间】:2011-03-17 00:02:06
【问题描述】:

这应该很简单,但它不起作用。

我的项目根目录下有一个文件。我想这样称呼它。

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")

我缺少一些设置吗?一定很简单……

【问题讨论】:

  • 您希望人们能够通过 URL 直接访问文件吗?如果没有,您可能希望将其放在 App_Data 而不是您网站的根目录中。
  • 我真的不在乎他们是否得到这个文件,它现在是一个测试项目。但是感谢您的提醒,因为这最终将投入生产。

标签: asp.net relative-path path


【解决方案1】:
GetWorkBook(Server.MapPath("tplBud806_wRevenue.xls"));

【讨论】:

【解决方案2】:

Server.MapPath?

【讨论】:

    【解决方案3】:

    GetWorkbook 不是 ASP.NET 函数,它可能默认为启动调用它的进程所在的文件夹。本例中的进程是一个 IIS 进程,并且可能在该文件夹中启动。

    【讨论】:

    • 感谢您的解释。我对 ASP.net 不太熟悉,所以这对我来说是新的。
    【解决方案4】:

    您的应用程序正在由位于错误目录中的 w3wp.exe 加载的 AppDomain 中运行。这意味着尝试查找任何文件都将从该目录开始。正如其他人所提到的,您应该使用Page.MapPath。它告诉应用程序开始查找您的 aspx 所在的文件夹。

    【讨论】:

      【解决方案5】:

      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 的更多信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-12
        • 2013-02-19
        • 2015-08-30
        • 2014-06-25
        • 2018-09-15
        • 1970-01-01
        • 2017-02-16
        • 1970-01-01
        相关资源
        最近更新 更多