在.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("")
也会产生这种效果。