获取路径的所有方法

System.IO.Path

WinForm

Application.ExecutablePath;
Application.StartupPath

 

//获取当前进程的完整路径,包含文件名(进程名)。
this.GetType().Assembly.Location;

//获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;

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

//获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。
 System.AppDomain.CurrentDomain.BaseDirectory;

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

//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
 System.Windows.Forms.Application.StartupPath;

//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
System.Windows.Forms.Application.ExecutablePath;

//获取应用程序的当前工作目录(不可靠,可能是快捷键的路径)。
 System.IO.Directory.GetCurrentDirectory();

Asp.net

获取当前应用程序的跟目录(物理路径)

AppDomain.CurrentDomain.BaseDirectory

获取网站根目录 

HttpContext.Current.Request.PhysicalApplicationPath; 
HttpRuntime.AppDomainAppPath

获取网站虚拟目录

Request.ApplicationPath

根据虚拟目录得到物理路径

HttpContext.Current.Server.MapPath(Request.ApplicationPath)

HttpRuntime.AppDomainAppPath==HttpContext.Current.Server.MapPath(Request.ApplicationPath)

 

 

获取URL路径

假设当前页完整地址是:http://www.test.com/aaa/bbb.aspx?id=5&name=kelli
"http://"是协议名
"www.test.com"是域名
"aaa"是站点名
"bbb.aspx"是页面名(文件名)
"id=5&name=kelli"是参数
【1】获取 完整url (协议名+域名+站点名+文件名+参数)
string url=Request.Url.ToString();
url= http://www.test.com/aaa/bbb.aspx?id=5&name=kelli
【2】获取 站点名+页面名+参数:
string url=Request.RawUrl;
(或 string url=Request.Url.PathAndQuery;)
url= /aaa/bbb.aspx?id=5&name=kelli
【3】获取 站点名+页面名:
string url=HttpContext.Current.Request.Url.AbsolutePath;
(或 string url= HttpContext.Current.Request.Path;)
url= aaa/bbb.aspx
【4】获取 域名:
string url=HttpContext.Current.Request.Url.Host;
url= www.test.com
【5】获取 参数:
  1、string url= HttpContext.Current.Request.Url.Query;
     url= ?id=5&name=kelli
  2、Request.QueryString["id"];

======================================================================================================================

ASP.NET 中设置路径的三种方式

 下面列举的是ASP.NET 开发中,常用的设置路径的三种方式。
Default.aspx.cs 代码如下:

public partial class _Default : System.Web.UI.Page 
{ 
 public string GetUrl(string _img)
 {
 //获取服务器上 ASP.NET 应用程序的虚拟应用程序根路径。
 string root = Request.ApplicationPath;
 
 //返回图片根目录下的绝对路径,并添加双引号。
 return '"'+ root + "/img/" + _img +'"';
 }
 protected void Page_Load(object sender, EventArgs e)
 { }
}

 

Default.aspx 代码如下:

<body>
 <form id="form1" runat="server">
 
 <img src="/三种地址的指定方式/img/book1.jpg" alt="HTML标签"/>
 
 <asp:Image runat="server" ImageUrl="~/img/book2.jpg" AlternateText="服务器控件的Alt属性"/>
 
 <img src=<%=GetUrl("book3.jpg")%> alt="从.cs 代码获得路径"/> 
 <!-- <%=GetUrl("book3.jpg");%> 这种方式错误!调用的函数后面不要添加“;”分号。-->
 </form>
</body>

注意:“/三种地址的指定方式”是这个站点的 根目录文件夹 的名字(根目录从根文件夹开始)。

 

运行的后,“查看源文件”的代码如下:

<body>
 <form name="form1" method="post" action="Default.aspx" id="form2">
<div>
 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"  
 value="/wEPDwULLTEwMTM4Mzg2MDJkZBus1frYuS31/0rZBi7gTRQlSein" />
</div>
 <img src="/三种地址的指定方式/img/book1.jpg" alt="HTML标签"/>
 
 <img src="img/book2.jpg" alt="服务器控件的Alt属性" style="border-width:0px;" />
 
 <img src="/三种地址的指定方式/img/book3.jpg" alt="从.cs 代码获得路径"/>
 
 </form>
</body>

 

总结:

○ 使用 <img /> 这种HTML 标签的方式是最简单的;

○ 使用 <asp: /> 服务器控件的方式是最安全的;

○ 使用后台代码加 <%=  %> 的方式是最灵活的(注意:调用的函数后面不要添加“;”分号);

 

如何获得站点虚拟路径所对应的磁盘物理路径

string path = Server.MapPath("img");
Response.Write(path);
// 打印结果: C:\Web_Test\三种地址的指定方式\img 

 

附加:Request获取url信息的各种方法


在ASP.NET 编程中,经常需要用Request 获取url 的有关信息,Request 中有多种方法获取url 信息,下面将各种方法得到的结果列出来。

测试的url 地址是 http://www.test.com/testweb/default.aspx, 结果如下:

Request.ApplicationPath:  /testweb
Request.CurrentExecutionFilePath:  /testweb/default.aspx
Request.FilePath:  /testweb/default.aspx
Request.Path:  /testweb/default.aspx
Request.PathInfo
Request.PhysicalApplicationPath:  E:\WWW\testweb\
Request.PhysicalPath:  E:\WWW\testweb\default.aspx
Request.RawUrl:  /testweb/default.aspx
Request.Url.AbsolutePath:  /testweb/default.aspx
Request.Url.AbsoluteUri:  http://www.test.com/testweb/default.aspx
Request.Url.Host:  www.test.com
Request.Url.LocalPath:  /testweb/default.aspx


在编写 ASP.NET 应用程序的时候,有时为了更好地进行控制静态文件的路径,如在模板页或者用户控件中设置js或者css文件的路径等,采用绝对路径是难免的。下面就是几种获取绝对路径的几种方法。

C# 代码
VirtualPathUtility.ToAbsolute(  "  ~/  "  )
HttpRuntime.AppDomainAppVirtualPath
Request.ApplicationPath
Page.ResolveUrl(
  "  ~  "  )

以上代码生成的结果如下:
当以网站的方式访问时,结果如下: 

VirtualPathUtility.ToAbsolute("~/")= /
HttpRuntime.AppDomainAppVirtualPath= /
Request.ApplicationPath= /
Page.ResolveUrl("~")= /

当以虚拟目录(http://localhost:806/web2/url.aspx)访问时,结果如下:

VirtualPathUtility.ToAbsolute("~/")= /web2/
HttpRuntime.AppDomainAppVirtualPath= /web2
Request.ApplicationPath= /web2
Page.ResolveUrl("~")= /web2/

采用第二种和第三种方法,还需要做一下处理,因为网站访问时是以/结尾,而以虚拟目录访问时则是没有/的,进行还得进行一次判断,稍微麻烦一点。
但是,这些方法在页面中使用是没有任何问题的,但是如果在 Global 的 Application_Start 事件里需要得到网站的绝对路径,则需要使用前面2种方法,如果使用第三种方法,则会报告如下的错误:
Request is not available in this context 
所以,只能采取头2种方法。例如

C# 代码
void  Application_Start(  object  sender, EventArgs e)
{
    System.IO.StreamWriter s 
=  new  System.IO.StreamWriter(HttpRuntime.AppDomainAppPath  +  "  log.txt  "  );
    s.WriteLine(VirtualPathUtility.ToAbsolute(
  "  ~/  "  ));
    s.WriteLine(HttpRuntime.AppDomainAppVirtualPath);
    s.Close();
}


 

========================================================
.NET中三种获取当前路径的代码
//Web编程
HttpContext.Current.Server.MapPath("FileName")
System.Web.HttpContext.Current.Request.Path
//Windows编程
System.Environment.CurrentDirectory
//Mobile编程
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
A.指定 客户端元素 资源的路径
B.指定 服务器控件 资源的路径
C.确定当前网站的物理文件路径
============================
使用网站中的资源时,通常必须指定资源的路径。
例如,您可以使用 URL 路径引用页面中的图像文件或网站中其他位置处的页面的 URL。
同样,Web 应用程序中的代码可以使用基于服务器的文件的物理文件路径对文件进行读写操作。
ASP.NET 提供用于引用资源并确定应用程序中的页面或其他资源的路径的方法。

 


A.指定 客户端元素 资源的路径
------------------------------
许多情况下,页面中的元素或控件必须引用外部资源,如文件。
ASP.NET 允许您通过各种方法引用外部资源。
所选方法取决于使用客户端元素还是服务器控件。
元素(不是页面中的服务器控件,而是客户端元素)以原样传递给浏览器。
因此,从客户端元素中引用资源时,应根据 HTML 中 URL 的标准规则构造路径。
可以使用完全限定(绝对)URL 路径,也可以使用各种类型的相对路径。
例如,如果页面包含一个 img 标记,则可以使用以下路径之一设置其 src 属性:
绝对 URL 路径:
阅读代码编辑代码运行效果复制HTML代码保存代码
如果引用其他位置(如外部网站)中的资源,则绝对 URL 路径非常有用。
站点根目录相对路径,
根据站点(不是应用程序)根目录进行解析。
此示例路径假定 Images 文件夹存在于网站根目录下:
阅读代码编辑代码运行效果复制HTML代码保存代码
如果您的网站为 http://www.xxx.com,则路径将解析为以下形式:
http://www.xxx.com/Images/SampleImage.jpg
如果将跨应用程序的资源(如图像或客户端脚本文件)
保留在网站根目录下的文件夹中,则站点根目录相对路径非常有用。
根据当前页面路径解析的相对路径:
阅读代码编辑代码运行效果复制HTML代码保存代码
解析为当前页面路径对等的相对路径。
阅读代码编辑代码运行效果复制HTML代码保存代码
注意
默认情况下,浏览器使用当前页面的 URL 作为基准解析相对路径。
但是,您可以在页面中包含 HTML base 元素,以指定替代基路径。

 

 
B.指定 服务器控件 资源的路径
-----------------------------
在引用资源的 ASP.NET 服务器控件中,
可以使用绝对路径或相对路径,这一点与客户端元素一样。
如果使用相对路径,则相对于页面、用户控件或包含该控件的主题的路径进行解析。
例如,假设 Controls 文件夹中包含一个用户控件。
该用户控件包含一个 Image Web 服务器控件,
该服务器控件的 ImageUrl 属性设置为以下路径:
Images/SampleImage.jpg
该用户控件运行时,路径将解析为以下形式:
/Controls/Images/SampleImage.jpg
无论承载用户控件的页面位置如何,都是如此。
服务器控件中的绝对和相对路径引用具有以下缺点:
绝对路径在应用程序之间是不可移植的。
如果移动绝对路径指向的应用程序,则链接将会中断。
如果将资源或页面移动到不同的文件夹,
可能很难维护采用客户端元素样式的相对路径。
为克服这些缺点,
ASP.NET 启用了 Web 应用程序根目录运算符 (~),
在服务器控件中指定路径时,可以使用该运算符。
ASP.NET 会将 ~ 运算符解析为当前应用程序的根目录。
可以结合使用 ~ 运算符和文件夹来指定基于当前根目录的路径。
下面的示例
演示使用 Image 服务器控件时用于指定图像的根目录相对路径的 ~ 运算符:
复制ASPX代码保存代码
ImageUrl="~/Images/SampleImage.jpg" />
ImageUrl="~/Images/SampleImage.jpg" />
在该示例中,
图像文件将从 Web 应用程序根目录下的 Images 文件夹中直接读取,
无论该页面位于网站的什么位置。
注意
~ 运算符只能为服务器控件识别,并且位于服务器代码中。
不能将 ~ 运算符用于客户端元素。
可以在服务器控件中的任何与路径有关的属性中使用 ~ 运算符。
注意
在主控页中,资源的路径基于内容页的路径进行解析。

 

 

C.确定当前网站的物理文件路径
----------------------------
在应用程序中,您可能需要确定服务器上的文件或其他资源的路径。
例如,如果应用程序以编程方式对文本文件进行读写操作,
则必须为用于读取和写入的方法提供该文件的完整物理路径。
将物理文件路径(如 C:\Website\MyApplication)
硬编码到应用程序中并不是很好的做法,
因为如果移动或部署应用程序,则路径会发生更改。
但是,
ASP.NET 为您提供了以编程方式获取应用程序中的任何物理文件路径的方法。
然后,您可以使用基文件路径创建所需资源的完整路径。
用于确定文件路径的两种最常用的 ASP.NET 功能是
返回路径信息的 HttpRequest 对象的属性,以及 MapPath 方法。
        注意 :
不应将物理文件路径发送到客户端,
因为它们可能会被恶意用户用来获取有关您的应用程序的信息。
根据请求属性确定路径
下表列出了 HttpRequest 对象的属性,
这些属性帮助您确定应用程序中的资源的路径。
下面的示例假定使用以下 URL 来发出浏览器请求:
http://www.xxx.com/MyApplication/MyPages/Default.aspx
对于这些示例,
术语“虚拟路径”是指跟在服务器标识符后面的请求 URL 的一部分,
此时虚拟路径如下所示:
/MyApplication/MyPages/Default.aspx
此外,这些示例假定网站根目录的物理路径为以下形式:
C:\inetpub\wwwroot\MyApplication\
最后,这些示例假定物理路径包含一个名为 MyPages 的文件夹。
则相关属性及其返回值如下:
ApplicationPath
获取当前应用程序的根目录路径,
无论在该应用程序中的什么位置请求该路径。
对于此示例,该属性将返回以下内容:
/
CurrentExecutionFilePath
获取当前请求的虚拟路径。
不同于 FilePath,
差别在于如果请求已在服务器代码中被重定向,
则 CurrentExecutionFilePath 就是正确的。
对于此示例,该属性将返回以下内容:
/MyApplication/MyPages/Default.aspx
如果作为对 Transfer 或 Execute 进行调用的结果,
您获取正在运行的代码中的属性,则路径将反映该代码的位置。
 
FilePath
获取当前请求的虚拟路径。
对于此示例,该属性将返回以下内容:
/MyApplication/MyPages/Default.aspx
不同于 CurrentExecutionFilePath,FilePath 不反映服务器端转换。

Path
获取当前请求的虚拟路径。对于此示例,该属性将返回以下内容:
/MyApplication/MyPages/default.aspx

PhysicalApplicationPath
获取当前正在执行的应用程序的根目录的物理文件系统路径。
对于此示例,该属性将返回以下内容:
C:\inetpub\wwwroot\

PhysicalPath
获取与请求的 URL 对应的物理文件系统路径。
对于此示例,该属性将返回以下内容:
C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx

使用 MapPath 方法
MapPath 方法返回传递给该方法的虚拟路径的完整物理路径。
例如,以下代码返回网站根目录的文件路径:
Visual Basic :
复制VB.NET代码保存代码Dim rootPath As String = Server.MapPath("~")
C# :
复制C#代码保存代码String rootPath = Server.MapPath("~");
注意
传递给 MapPath 方法的路径必须为应用程序相对路径,而不是绝对路径。
============================================================

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值