zoukankan      html  css  js  c++  java
  • 关于获取目录的N种方法 的汇总

    前段时间在Global.asax.cs中的Session_End中使用Server.MapPath() 出现"服务器操作在此上下文中不可用"异常.

    网络上给出的解决方案:System.AppDomain.CurrentDomain.BaseDirectory.

    网上搜出些方法供大家参考:

    C#中AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath的区别

    // 获取程序的基目录。
    System.AppDomain.CurrentDomain.BaseDirectory

    // 获取模块的完整路径。
    System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

    // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。
    System.Environment.CurrentDirectory

    // 获取应用程序的当前工作目录。
    System.IO.Directory.GetCurrentDirectory()

    // 获取和设置包括该应用程序的目录的名称。
    System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase

    // 获取启动了应用程序的可执行文件的路径。
    System.Windows.Forms.Application.StartupPath

    // 获取启动了应用程序的可执行文件的路径及文件名
    System.Windows.Forms.Application.ExecutablePath

    C# WinForm中AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath的区别示例如下:

    private void Frm_Server_Load(object sender, EventArgs e)
            {
                MessageBox.Show(AppDomain.CurrentDomain.BaseDirectory);
                MessageBox.Show(Application.StartupPath );
             }

    说明:

    1.   AppDomain.CurrentDomain.BaseDirectory 返回结果为: D:mycode

         Application.StartupPath 返回结果为: D:mycode

    2.  Application.StartupPath 只能用于WinForm窗体中,而AppDomain.CurrentDomain.BaseDirectory既可以用于WinForm窗体中,也可以用于类库DLL文件中.

    ASP.NET中Server.MapPath() 和 Request.MapPath()使用区别(于三份资料中提取)

    一、

    ASP.NET中Server.MapPath()和Request.MapPath()使用区别:

    Server.MapPath(string):是将相对于当前调用文件的文件(或目录)映射为物理路径;
    Request.MapPath(string):是将string虚拟路径映射为物理路径(asp中Request无此方法)

    Server.MapPath(string)中string可以用“../”方式引用父目录,甚至可以将此目录跳到整个WEB目录外,如:C:WWWROOT
    目录为WEB根目录,在根目录文件中调用此Server.MapPath("../xyz.gif"),则可以调用WEB目录外的脚本、资源等。

    Request.MapPath(string)中的string为虚拟目录,只能相对WEB虚拟目录形式的,也不允许"../"方式调用,只能是"/","/xx"等字符串

    有时候直接用Server.MapPath(string)调用一个文件比较麻烦,因为不同的目录中调用同一个Server.MapPath(string)函数就会得到不同的值,特殊的话,就需要通过判断本身目录层次才能获取正确的地址,使用的Request.MapPath(string)就可以调用同一个目录文件。不用做目录判断

    二、

    Server.MapPath的命名空间

    习惯用Access的朋友都知道:ADO.NET链接Access数据库经常这么写:
    strcon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("datebase/indexDB.mdb");
    这 里用Server.MapPath得到应用程序的物理路径!如果你是在当前web项目下的一个类中如上写链接语句,可能会提示找不到Server、因为 Server的完整路径是System.Web.HttpContext.Current.Server。using System.Web是显然不够的;但是在从内置Page类继承的类中可以直接写Server.MapPath"data.mdb"),应该是因为 Page类已经包含了这些类路径。
    如果你从Page类继承的类中执行这条语句,才可以简单地使用 
    DataBase = Server.MapPath("data.mdb");
    否则写全命名空间:System.Web.HttpContext.Current.Server.MapPath();
    注意:如果是在一个类库下的一个类中、要先添加引入using System.Web;因为新建一个类库时默认是不引入using System.Web的!

    已注:在类文件中,对server以及Request对象中无法直接访问,要想访问,必须使用如System.Web.HttpContext.Current.Server.MapPath(); System.Web.HttpContext.Current.Request;

    的方式进行 。

    三、

    ASP.NET中Server.MapPath()、Request.MapPath() 和 Request.PhysicalApplicationPath()

    Response.Write(Request.PhysicalApplicationPath.ToString());
    Response.Write(Server.MapPath("mydb.mdb").ToString());

    经过实验,我发现:Request.PhysicalApplicationPath.ToString()是你的网站所在的目录 ,比如我的就是F:fqhtdocs,而这个地址不管你的网页在哪个子文件夹里,都是一样的。

    Server.MapPath("mydb.mdb").ToString() 是你的网页所在的文件夹再加上参数字符串,而不管这个参数字符串是 什么,存在不存在 比如我在qiye子文件夹里放了一个1/aspx文件,其中有这样一 句:Response.Write(Server.MapPath("mydb.mdb").ToString());试验出来的值是:F:fq htdocsqiyemydb.mdb

    另外,Server.MapPath("mydb.mdb").的参数的首部最好不要含有“/”,l因为这意味着根。 Response.Write(Server.MapPath("/mydb.mdb").ToString());试验出来的值是:c: /www_root

    ASP.NET中Server.MapPath() 和 Request.MapPath()

    ASP.NET中Server.MapPath() 和 Request.MapPath()使用区别:

    Server.MapPath(string) :是将相对于当前调用文件的文件(或目录)映射为物理路径;
    Request.MapPath(string) :是将string虚拟路径映射为物理路径(为当前请求将请求的URL中的虚拟路径映射到服务器上的物理路径。)

    Server.MapPath(string) 中string 可以用“../”方式引用父目录,甚至可以将此目录跳到整个WEB目录外,如:C:WWWROOT
    目录为WEB根目录,在根目录文件中调用此Server.MapPath("../xyz.gif"),则可以调用WEB目录外的脚本、资源等。

    Request.MapPath(string) 中的string为虚拟目录,只能相对WEB虚拟目录形式的,也不允许"../"方式调用,只能是"/","/xx"等字符串

    有时候直接用Server.MapPath(string) 调用一个文件比较麻烦,因为不同的目录中调用同一个Server.MapPath(string) 函数就会得到不同的值,
    特殊的话,就需要通过判断本身目录层次才能获取正确的地址,使用的Request.MapPath(string)就可以调用同一个目录文件。不用做目录判断

    1、Server.MapPath("/") 应用程序根目录所在的位置 如 C:Inetpubwwwroot 
    2、Server.MapPath("./") 表示所在页面的当前目录 
    注:等价于Server.MapPath("") 返回 Server.MapPath("") 所在页面的物理文件路径 
    3、Server.MapPath("../")表示上一级目录 
    4、Server.MapPath("~/")表示当前应用级程序的目录,如果是根目录,就是根目录,如果是虚拟目录,就是虚拟目录所在的位置 如 C:InetpubwwwrootExample

  • 相关阅读:
    Android应用程序窗口(Activity)实现框架简要介绍和学习计划
    Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
    《Android系统源代码情景分析》一书勘误
    Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析
    非IE内核浏览器支持activex插件
    让火狐浏览器可以访问含有activex控件网页的三种方式
    C++中delete和delete[]的区别
    动态加载JS脚本
    创建一个弹出DIV窗口
    C# 向下遍历删除子目录和子文件 及 向上遍历空的父目录
  • 原文地址:https://www.cnblogs.com/mr-jia/p/3585732.html
Copyright © 2011-2022 走看看