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


          相信很多用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

  • 相关阅读:
    Java&Go三种HTTP服务端端性能测试
    利用闭包实现自定义等待方法
    LevelDB在测试中应用应用
    利用Java反射处理private变量
    FunTester2021年总结
    推倒重来的觉悟
    SpringMVC项目依赖和静态资源导出
    DES算法详解
    5G AKA协议详解
    RSA算法加解密证明过程
  • 原文地址:https://www.cnblogs.com/yangxiaohu1/p/1436111.html
Copyright © 2020-2023  润新知