常见路径使用方法

 

一、Server.MapPath

简介

Server.MapPath()的全名是System.Web.HttpContext.Current.Server.MapPath(),它返回与Web服务器上的指定虚拟路径相对应的物理文件路径。

其参数path为Web 服务器的虚拟路径,返回结果是与path相对应的物理文件路径。但有时参数并非为虚拟路径,而是用户自定义的文件名。

语法

Server.MapPath(path);

参数
path表示Web服务器上的虚拟路径,如果path值为空,则该方法返回包含当前应用程序的完整物理路径。

注意事项

Server.MapPath()有时在程序调试时会提示“当前上下文中不存在名称“Server””错误,从而不支持函数Server.MapPath()的使用。尽管引用了命名空间“using System.Web;”也是无济于事,此时就需要使用其全名,或者是当前使用Server.MapPath()函数的类继承自System.Web.UI.Page。

应用

假设当前的网站目录为E:\wwwroot 应用程序虚拟目录为E:\wwwroot\company 浏览的页面路径为E:\wwwroot\company\news\ 下面的一个 aspx页面。

在该页面中使用

Server.MapPath("") :返回当前页面所在的物理文件路径:E:\wwwroot\company\news

Server.MapPath("/") :返回应用程序根目录所在的物理文件路径:E:\wwwroot

Server.MapPath("./") :返回当前页面所在的物理文件路径:E:\wwwroot\company\news

Server.MapPath("../"):返回当前页面所在的上一级的物理文件路径:E:\wwwroot\company

Server.MapPath("~/"):返回应用程序的虚拟目录(路径):E:\wwwroot\company

Server.MapPath("~"):返回应用程序的虚拟目录(路径):E:\wwwroot\company

和 Request.MapPath的区别

Server.MapPath(string) :是将相对于当前调用文件的文件(或目录)映射为物理路径;

Request.MapPath(string) :是将string虚拟路径映射为物理路径(asp中Request无此方法)

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

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

和 HostingEnvironment.MapPath的区别

  Server.MapPath实际上最终还是调用了HostingEnvironment.MapPath,但他俩也不是完全的相等,存在一些区别,Server.MapPath用创建了一个VirtualPath的object。

  所以Server.MapPath相对来说增加了一些功能,对比如下:

  1、Server.MapPath接受null,HostingEnvironment.MapPath不可以

  2、HostingEnvironment.MapPath不接受相对路径

因为Server.MapPath需要HttpContext,所以大多数时候都可以直接用HostingEnvironment.MapPath,除非会出现以上两种情况。

 

二、其他常用方法

System.AppDomain.CurrentDomain.BaseDirectory 

  获取当前应用程序域的基目录,可在类库中使用。

  是获取基目录,它由程序集冲突解决程序用来探测程序集。由显示的路径可以看出,它代表的是程序集所在的目录,它具有读取和写入的属性。这只不过是它常用的属性,如果你要使用这些属性,你的文件【123.txt】要放在程序集的目录下。还有使用它需要导入IO包。

System.Web.Hosting.HostingEnvironment.MapPath   取得文件绝对路径

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

System.Environment.CurrentDirectory    // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。(不管再哪个项目调用,都是启动项目的路径)

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

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

参考文章:

https://blog.csdn.net/nnn_net/article/details/71080905

https://blog.csdn.net/xrjohn/article/details/50952503

https://blog.csdn.net/leonardo_dream/article/details/50979049

原文地址:https://www.cnblogs.com/xcsn/p/3040260.html