前段时间在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. POJ 3691 AC自动机上的dp

    题目大意: 给定一些不合理的DNA序列,再给一段较长的dna序列,问最少修改几次可以使序列中不存在任何不合理序列,不能找到修改方法输出-1 这里你修改某一个点的DNA可能会影响后面,我们不能单纯的找匹 ...

  2. 【转】./configure && make && make install详解

    在Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README  INSTALL两个说明文件,这两个文件会清楚的告诉你如何可以正确的完成这个软件的安装!          我们都知道源 ...

  3. tic/toc/cputime测试时间

    cputime测试代码运行时间可能不及tic/toc准确是众所周知的事情.本文并非旧话重提,而是期望起到抛砖引玉的效果,从而找到cputime与tic/toc内在的区别.望不吝赐教! 用tic/toc ...

  4. Linear Predictors

    In this chapter we will study the family of linear predictors, one of the most useful families of hy ...

  5. (五)CoreData 使用 (转)

    第一次真正的使用CoreData,因此也会写下体会和心得...等有时间 Core Data数据持久化是对SQLite的一个升级,它是ios集成的,在说Core Data之前,我们先说说在CoreDat ...

  6. Ubuntu 14.10 下安装Sublime Text 3,注册码,中文输入法

    1 下载Sublime Text 3,网址http://www.sublimetext.com/3 2 双击deb安装 3 因为需要需要付费,输入下面的注册码,下面的注册码,来自百度,亲测可行 Sub ...

  7. hdu 2042

    Ps:...好简单的一道题...直接AC,就是利用递归 代码: #include "stdio.h"int find(int num,int n);int main(){ int ...

  8. Xtreme Toolkit Pro 免费下载地址

    Xtreme Toolkit Pro 是针对Windows程序员的一套先进的用户界面套包,强大的功能可使您的应用程序具有专业的.现代感的外观. Xtreme Toolkit Pro 由8个专业级的构件 ...

  9. Access数据库参数没值

    OleDbParameter[] par = { new OleDbParameter(Par_Password,Info.Password), new OleDbParameter(Par_StuN ...

  10. SQL实现字段内容查找和替换