文件路径和根问题

时间:2014-08-05 21:12:13

标签: asp.net

所以我的网站代码路径如下:

C:/ folder1 / folder2 / folder3 /我在VS2012上发布的网站代码 - 在我的网站上我收到了一个附件,我想把它保存到以下路径C:/ folder4

当我尝试以下代码时:file.SaveAs(Server.MapPath(“../../ folder4 /”)+ filename);它说我要经过根。有人可以向我解释发生了什么以及我是否以及如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

Server.MapPath()用于获取与服务器根相关的路径。由于您尝试将其保存在服务器虚拟目录之外,因此您可能只需对文件进行硬编码。

file.SaveAs(@"C:/folder4/" + filename);

根据您的IIS工作线池权限,它可能无法正常工作。

答案 1 :(得分:0)

file.SaveAs(Server.MapPath(“folder4 /”)+ filename); 因为我看不到你的文件夹结构,所以我建议在Server.MapPath()之后设置一个断点来查看完整的URI路径以确定你的下一步,因为它说你已经过了root,你可能会有一对多的“../”字符串。

答案 2 :(得分:0)

根据the documentation for HttpServerUtility.MapPath

  

您无法指定Web应用程序之外的路径

这正是你想要做的。如果您将“根”解释为应用程序的根文件夹,那么甚至是错误消息告诉您的内容。

要么

  1. 使用绝对路径或
  2. 将您的数据存储在应用程序文件夹下
  3. 使用MapPath(“〜/”)获取当前目录并从中构建相对路径(实际上,只需在调用MapPath之外移动“../ ..”)。

    我可能会建议选择2.因为它会减少麻烦。权限和托管在同一服务器上的多个站点。

答案 3 :(得分:0)

Server.MapPath(...)尝试返回您为其提供的虚拟或相对路径的物理(“真实”)目录。而且由于虚拟目录无法在这个意义上“定位”根目录,因此您尝试做的事情毫无意义。你可以从domain.com/somefolder转到domain.com/,但你真的不能再往前走了。

您可以使用Environment.CurrentDirectory作为查找文件夹的起点,除此之外,只需使用SaveAs(..),就像您现在一样。