在古老的asp中,Server.MapPath无比好用,使用Server.MapPath可以很方便的返回物理路径的上一层;而在.Net中,返回的是虚拟路径的上一层,郁闷。
比如我们localhost的物理目录是“c:\inetpub\wwwroot\”,我们把“D:\mywebsite\test”设置为web共享, 在“D:\mywebsite\test”下的文件夹“NewFolder1”中,有文件“webform1.aspx”。
运行以下代码:
Response.Write(Server.MapPath("") + "<br>");
Response.Write(Server.MapPath("..") + "<br>");
Response.Write(Server.MapPath("../") + "<br>");
Response.Write(Server.MapPath("../../") + "<br>");
输出:
D:\mywebsite\test\NewFolder1
D:\mywebsite\test
D:\mywebsite\test\
c:\inetpub\wwwroot\
<%
response.write Server.MapPath("..") + "<br>"
response.write Server.MapPath("../") + "<br>"
response.write Server.MapPath("../../") + "<br>"
%>
(需要说明的是,asp代码中response.write Server.MapPath("")会出现错误。)
输出:
D:\mywebsite\test
D:\mywebsite\test
D:\mywebsite
正解。
所以,Asp.Net让人郁闷。
解决的办法,只好是将Access数据库的物理路径直接在配置文件中写好,这样可以不必使用MapPath方法,也不必受其限制。目前来看,虽然有点笨,但还是最好的方法。
















