23

我有代码

string xsltPath = System.Web.HttpContext.Current.Server.MapPath(@"App_Data") + "\\" + TransformFileName

它返回

C:\inetpub\wwwroot\websiteName\SERVICENAME\App_Data\FileName.xsl

为什么我得到了 ServiceController 的路径,SERVICENAME?我想要 App_Data 的路径

C:\inetpub\wwwroot\websiteName\App_Data\FileName.xsl

4

3 回答 3

57

您需要指定要从虚拟根目录开始:

string xsltPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data"), TransformFileName);

Path.Combine此外,使用组合路径而不是连接字符串是更好的做法。Path.Combine将确保您不会遇到双路径分隔符的情况。

编辑

您能否定义“绝对”和“相对”路径以及它们与“物理”和“虚拟”路径的比较?

MSDN对相对、物理和虚拟路径有很好的解释。看看那里。

于 2011-09-29T16:03:58.857 回答
7

到目前为止给出的答案是您正在寻找的,但我认为,在您的特定情况下,您实际需要的是:

AppDomain.CurrentDomain.GetData("DataDirectory").ToString()

如果该目录名称在 MVC 或 ASP.NET 的未来版本中发生更改,这仍将返回到 App_Data 目录的文件路径。

于 2011-09-29T16:09:19.597 回答
0

尝试这样做(@"~/App_Data")~/代表根目录。

于 2011-09-29T16:04:08.197 回答