现在的位置: 首页 > 综合 > 正文

关于.net多层架构的网站如何在底层类库中获取网站的物理路径

2012年10月31日 ⁄ 综合 ⁄ 共 1955字 ⁄ 字号 评论关闭

      相信很多用asp.net+Access做网站的朋友经常都会有这样一个需求:就是想在数据库访问层类库中获取Access数据库的物理路径,然后再拼接数据库连接字符串进行数据库相关的操作.在网站UI层我们可以有很多种方法获取一个网站的物理路径,如:1. Request.PhysicalApplicationPath 2. Request.MapPath("~/"),但是在数据库访问层用这些方法就不行...

      笔者近日也有此需求,通过 "g.cn+自己研究" 写出以下方法,经测试(vs2008)有效,所以拿出来分享给大家.

      

      using System.Reflection;
      using System.IO;  //使用前别忘了引用这两个命名空间.

        /// <summary>
        
/// 获取Access数据库的物理路径
        
/// </summary>
        
/// <returns></returns>
        public static string GetDBPath()
        {
            
string str = Assembly.GetExecutingAssembly().Location;
            str 
= Path.GetDirectoryName(str) + @"\__AssemblyInfo__.ini";
            str 
= File.ReadAllText(str, System.Text.Encoding.Unicode);
            
int index = str.IndexOf("file:///"+ 8;
            
int length = str.IndexOf("/bin");
            str 
= str.Substring(index, length - index);
            str 
= str.Replace('/''\\');
            str 
+= @"\App_Data\myDB.mdb";
            
            
return str;   //最后返回的就是该数据库的物理路径.
        }

 

      代码解释:

     1. string str = Assembly.GetExecutingAssembly().Location; 

      获取到的值是一个临时目录,如:“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\thinclient\ba81bed7\a7082081\assembly\dl3\62f82680\8345eb5b_37a6c901\abc.dll

      2.str = Path.GetDirectoryName(str) + @"\__AssemblyInfo__.ini";

       关键是这一句,在dll文件同一目录下有一个"__AssemblyInfo__.ini"文件,用记事本打开可以发现里面包含有dll的实际物理地址,知道这个就好办了,呵呵.

      3.   str = File.ReadAllText(str, System.Text.Encoding.Unicode);
            int index = str.IndexOf("file:///") + 8;
            int length = str.IndexOf("/bin");
            str = str.Substring(index, length - index);
            str = str.Replace('/', '\\');
            str += @"\App_Data\cms.mdb";

        这些代码就不详细解释了,就是把那个ini文件读出来,从里面找出网站bin文件夹的实际物理路径,然后拼接数据库文件名,就得到了数据库的物理路径了,不过这个方法有效的前提是数据库文件跟网站在同一目录下才行.

        后记,这只是本人在写程序过程中的一点积累,可能各位牛人还有更简便的方法可以实现,希望不吝赐教.

                                                                                                            --- 小虎  2009.04.15

抱歉!评论已关闭.