前段时间在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:\fq\htdocs\,而这个地址不管你的网页在哪个子文件夹里,都是一样的。

Server.MapPath("mydb.mdb").ToString() 是你的网页所在的文件夹再加上参数字符串,而不管这个参数字符串是 什么,存在不存在 比如我在qiye子文件夹里放了一个1/aspx文件,其中有这样一 句:Response.Write(Server.MapPath("mydb.mdb").ToString());试验出来的值是:F:\fq \htdocs\qiye\mydb.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:\Inetpub\wwwroot\ 
2、Server.MapPath("./") 表示所在页面的当前目录 
注:等价于Server.MapPath("") 返回 Server.MapPath("") 所在页面的物理文件路径 
3、Server.MapPath("../")表示上一级目录 
4、Server.MapPath("~/")表示当前应用级程序的目录,如果是根目录,就是根目录,如果是虚拟目录,就是虚拟目录所在的位置 如 C:\Inetpub\wwwroot\Example\

关于获取目录的N种方法 的汇总的更多相关文章

  1. C#获取当前路径的7种方法

    总结C#获取当前路径的7种方法 C#获取当前路径的方法如下: 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName ...

  2. C#中得到程序当前工作目录和执行目录的五种方法

    string str="";str += "\r\n" + System.Diagnostics.Process.GetCurrentProcess().Mai ...

  3. PHP中获取星期的几种方法

    PHP中获取星期的几种方法   PHP星期几获取代码: 1 date(l); 2 //data就可以获取英文的星期比如Sunday 3 date(w); 4 //这个可以获取数字星期比如123,注意0 ...

  4. VC++获取IDC_EDIT的7种方法

    VC++获取IDC_EDIT的7种方法 http://blog.csdn.net/baizengfei/article/details/7997618 //第一种方法 int number1, num ...

  5. Java获取随机数的几种方法

    Java获取随机数的几种方法 .使用org.apache.commons.lang.RandomStringUtils.randomAlphanumeric()取数字字母随机10位; //取得一个3位 ...

  6. spring 获取 WebApplicationContext的几种方法

    spring 获取 WebApplicationContext的几种方法 使用ContextLoader WebApplicationContext webApplicationContext = C ...

  7. Struts2 后台获取路径的几种方法

    Struts2 后台获取路径的几种方法 package actions.app; import java.io.File; import org.apache.struts2.ServletActio ...

  8. FTP 无法获取目录列表的处理方法

    FTP 无法获取目录列表的处理方法 1.以阿里云的服务器为例 对于阿里云的服务器是因为阿里云为了进一步保护用户的安全利益使用了安全策略组,我们要设置安全策略组对应的端口开启. 首先要设置端口范围,这个 ...

  9. VC获取cookies的几种方法

    方法一: CInternetSession::GetCookie This member function implements the behavior of the Win32 function  ...

随机推荐

  1. centos 升级 python后 python-setuptools pip 安装依赖报错

    解决办法: $ wget https://svn.apache.org/repos/asf/oodt/tools/oodtsite.publisher/trunk/distribute_setup.p ...

  2. ROS TF——learning tf

    在机器人的控制中,坐标系统是非常重要的,在ROS使用tf软件库进行坐标转换. 相关链接:http://www.ros.org/wiki/tf/Tutorials#Learning_tf 一.tf简介 ...

  3. android 定时器的使用

    1.android中通常是使用AlarmManager来定时启动一个单次或重复多次操作的.具体的说就是我们通过AlarmManager设定一个时间和注册一个intent到系统中,然后在该时间到来时,系 ...

  4. 黑客界大拿tombkeeper文章:怎么学好技术成为技术大拿(题目我自拟的)

    这两天论坛上又有人开始抱怨世风日下,大家都现实了,都不开放了,不交流了.对这种“月经贴”,我基本上已经习惯了,不过因为吃了粉皮炖鸡,心情比较好,于是就说了两句. 三四年前,当时我对人性的看法还不像现在 ...

  5. MySQL数据类型(四)

    一.数据类型 二.整型类型 tinyInt: 1个字节:-128-127(有符号) 是否有符号,可以定义时,使用unsign标识,表示无符号的,不写表示有符号的 Create table studen ...

  6. jQuery 中 children() 与 find() 用法的区别

    1.children() 与 find() 用法的区别 通过children获取的是该元素的下级元素,而通过find获取的是该元素的下级所有元素.

  7. mycat启动后,用Navicat Premium 连接报 "2013"

    最近在学习mycat,启动后,用Navicat Premium 连接报 "2013"  Lost Connection During Query ,经过一顿百度也没发现是怎么回事, ...

  8. RFID Hacking①:突破门禁潜入FreeBuf大本营

    某天,偶然间拿到了FreeBuf Pnig0s同学的工卡信息,终于有机会去做一些羞羞的事情了 引子 以下故事纯属虚构,如有雷同,纯属巧合. 我应聘了一个大型IT公司的"网络攻击研究部经理&q ...

  9. python 优雅的使用正则表达式 ~ 1

    正则表达式简介 正则表达式 , 也称谓 REs , 本质上是一个微小且高度专业化的编程语言. 他被嵌入到许多语言当中 , 例如 python 就是通过 re 模块来提供给我们使用 , 正则表达式 是通 ...

  10. 用C语言计算圆的面积~!!!!!!!

    #include <stdio.h>void main(){ int a,b,c,y,g,f; printf("圆柱底面的半径,圆柱的高"); scanf(" ...