注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 CCIE-Lab考试将新增10分钟..
 帮助

Asp.Net中的MapPath目录问题


2007-07-13 18:58:15
 标签:.net asp.net   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lcring.blog.51cto.com/195827/33968
最近因为要用.Net连接Access数据库,在数据库路径上遇到了麻烦。
找了半天,没搞懂.Net中的目录问题。

在古老的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\
而在一个Asp文件“test.asp”中,有以下代码:
 <%
 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让人郁闷。
并且,不论Asp.Net还是Asp,用MapPath方法获得的物理路径,都与当前文件所处的目录有关,所以,在网站中处于不同目录深度的文件不能调用统一的方法获得access数据库的物理路径,实在是很郁闷的问题。

解决的办法,只好是将Access数据库的物理路径直接在配置文件中写好,这样可以不必使用MapPath方法,也不必受其限制。目前来看,虽然有点笨,但还是最好的方法。

本文出自 “李春锐的技术博客” 博客,请务必保留此出处http://lcring.blog.51cto.com/195827/33968





    文章评论
 
2007-07-13 21:30:24
正确的办法,虽然有点复杂,但很好用
呵呵,我也刚刚开始看,共同进步哪

2007-07-26 10:34:03
在ASP.NET中使用"~"符号就可以取得服务器根目录的路径了。
比如说Server.MapPath("~/App_Data")就可以得到App_Data目录,无论当前的虚拟目录在哪。

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: