在.NET Web应用程序中获取当前目录

所以我有一个Web项目,我试图使用C#方法Directory.GetCurrentDirectory()获取网站的根目录。 我不想使用静态path,因为将来文件位置将发生变化。 这个方法运行在我的imageProcess.aspx.cs文件中,但是我认为它会返回:

 C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs 

我反而得到:

 C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\ 

任何人都可以解释为什么会发生这种情况,可能的解决scheme是什么? 非常感谢。

当前目录是系统级别的function; 它将返回从中启动服务器的目录。 这与网站无关。

你想要HttpRuntime.AppDomainAppPath

如果你在HTTP请求中,你也可以调用Server.MapPath("~/Whatever")

使用此代码:

  HttpContext.Current.Server.MapPath("~") 

详细参考:

Server.MapPath指定映射到物理目录的相对path或虚拟path。

  • Server.MapPath(".")返回正在执行的文件(例如aspx)的当前物理目录
  • Server.MapPath("..")返回父目录
  • Server.MapPath("~")返回到应用程序根目录的物理path
  • Server.MapPath("/")返回到域名根目录的物理path(不一定与应用程序的根目录相同)

一个例子:

假设您指定了一个网站应用程序( http://www.example.com/

 C:\Inetpub\wwwroot 

并安装你的商店应用程序(子网站作为虚拟目录在IIS中,标记为应用程序)中

 D:\WebApps\shop 

例如,如果您在以下请求中调用Server.MapPath

 http://www.example.com/shop/products/GetProduct.aspx?id=2342 

然后:

 Server.MapPath(".") returns D:\WebApps\shop\products Server.MapPath("..") returns D:\WebApps\shop Server.MapPath("~") returns D:\WebApps\shop Server.MapPath("/") returns C:\Inetpub\wwwroot Server.MapPath("/shop") returns D:\WebApps\shop 

如果Path以向前(/)或向后斜杠()开始,则MapPath方法返回一个path,就像Path是完整的虚拟path一样。

如果Path不以斜杠开始,则MapPath方法将返回相对于正在处理的请求的目录的path。

注意:在C#中,@是逐字string操作符,意思是该string应该被“按原样”使用,而不是为了转义序列而被处理。

脚注

Server.MapPath(null)Server.MapPath("")也会产生这种效果。