120

所以我有一个网络项目,我正在尝试使用 c# 方法获取网站的根目录Directory.GetCurrentDirectory()。我不想使用静态路径,因为文件位置将来会发生变化。此方法在我的 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\

谁能解释为什么会发生这种情况以及可能的解决方案是什么?非常感谢。

4

3 回答 3

229

当前目录是系统级功能;它返回启动服务器的目录。它与网站无关。

你想要HttpRuntime.AppDomainAppPath

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

于 2012-06-08T15:19:31.840 回答
121

使用此代码:

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

详细参考:

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

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

一个例子:

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

C:\Inetpub\wwwroot

并在

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 不以斜杠开头,则该MapPath方法返回相对于正在处理的请求的目录的路径。

注意:在 C# 中,@ 是逐字字面字符串运算符,这意味着该字符串应该“按原样”使用,而不是针对转义序列进行处理。

脚注

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

于 2014-12-16T08:51:43.233 回答
0

对于点网 6,我使用:

AppContext.BaseDirectory

很酷的一点是,它在 asp.net 和控制台应用程序上都是一样的。

于 2022-01-12T17:21:36.803 回答