前段时间在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. Terminating app due to uncaught

    1>Images.xcassets: A 60x60@2x app icon is required for iPhone apps targeting iOS 7.0 and later 图片 ...

  2. iOS 高效添加圆角效果实战讲解

    圆角(RounderCorner)是一种很常见的视图效果,相比于直角,它更加柔和优美,易于接受.但很多人并不清楚如何设置圆角的正确方式和原理.设置圆角会带来一定的性能损耗,如何提高性能是另一个需要重点 ...

  3. JS页面打印,预览,设置,分页

    一)在HTML页中加载打印对象 <object id="WebBrowser" width="0" height="0" classi ...

  4. MongoDB error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js(转)

    rror: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js 一般这种情况就是:自己指定的数据库,所以不能.自动加 ...

  5. C语言快速排序

    复习快速排序,用C语言实现: #include <stdio.h> int quicksort(int begin, int end, int a[], int len); void ma ...

  6. Office word excel电子表格在线编辑的实现方法

    Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件. IIS(6.0)支持webdav,这在IIS管理器的web服务扩展中可以看到.利用IIS作为webdav ...

  7. css 设置样式

    前台div <div id="DIV1" runat="server" > </div> 后台: this.DIV1.Style.Val ...

  8. [转]Golang- import 导入包的语法

    http://blog.csdn.net/zhangzhebjut/article/details/25564457 一 包的导入语法      在写Go代码的时候经常用到import这个命令用来导入 ...

  9. Xcode 断点调试,取消直接进入到汇编语言界面处理

    Xcode 上部的菜单拦: Product -> Debug Wokflow  下的菜单中,将“ Always Show Disassembly ”的勾去掉.(勾上的意思是用汇编语言进行Debu ...

  10. 1.NSThread

    前言 每个iOS应用程序都有个专门用来更新显示UI界面.处理用户触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就 ...