C#路径总结
| 【相对路径】 | |
| Request.ApplicationPath | /src |
| Path.GetDirectoryName(HttpContext.Current.Request.RawUrl ) | //src//Xiaoshe |
| Context.Request.Path | /src/Xiaoshe/Xiaoshe_New.aspx |
| Context.Request.CurrentExecutionFilePath | /src/Xiaoshe/Xiaoshe_New.aspx |
| Context.Request.FilePath | /src/Xiaoshe/Xiaoshe_New.aspx |
| HttpContext.Current.Request.RawUrl | /src/Xiaoshe/Xiaoshe_New.aspx |
| HttpContext.Current.Request.Url | http://localhost:1344/src/Xiaoshe/Xiaoshe_New.aspx |
| TemplateSourceDirectory | /src/Controls |
| 【绝对路径】 | |
| Server.MapPath("./") | E://Wonsoft//Pro2//src//Xiaoshe// |
| Server.MapPath("") | E://Wonsoft//Pro2//src//Xiaoshe |
| Context.Request.PhysicalApplicationPath | E://Wonsoft//Pro2//src// |
| Context.Request.PhysicalPath | E://Wonsoft//Pro2//src//Xiaoshe//Xiaoshe_New.aspx |
| MapPathSecure(TemplateSourceDirectory) | E://Wonsoft//Pro2//src//Controls string |
| 【其他】 | |
| Control.ResolveClientUrl(string relativeUrl) | |
| Control.ResolveUrl(string relativeUrl) |
/获取当前进程的完整路径,包含文件名(进程名)。
string str = this.GetType().Assembly.Location;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
//获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。
string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
string str = System.Environment.CurrentDirectory;
result: X:\xxx\xxx (.exe文件所在的目录)
//获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")
//获取和设置包含该应用程序的目录的名称。
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")
//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
string str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)
//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string str = System.Windows.Forms.Application.ExecutablePath;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
//获取应用程序的当前工作目录(不可靠)。
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
========================================================
.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 方法的路径必须为应用程序相对路径,而不是绝对路径。
C#路径总结的更多相关文章
- mapreduce中一个map多个输入路径
package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...
- Akka.net路径里的user
因为经常买双色球,嫌每次对彩票号麻烦,于是休息的时候做了个双色球兑奖的小程序,做完了发现业务还挺复杂的,于是改DDD重做设计,拆分服务,各种折腾...,不过这和本随笔没多大关系,等差不多了再总结一下, ...
- java中servlet的各种路径
1. web.xml中<url-pattern>路径,(叫它Servlet路径!) > 要么以“*”开关,要么为“/”开头 2. 转发和包含路径 > *****以“/”开头:相 ...
- 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...
- 使用JavaScript为一张图片设置备选路径
在做网页开发的时候,有时候希望给图片设置一个备选路径,即,当src属性对应的主路径加载失败的时候,图片可以马上切换到备选路径.这样,即使主路径失效了,显示备用路径也不会影响网页的正常体验. 注意到网页 ...
- iOS之开发中一些相关的路径以及获取路径的方法
模拟器的位置: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs ...
- Android中访问sdcard路径的几种方式
以前的Android(4.1之前的版本)中,SDcard路径通过"/sdcard"或者"/mnt/sdcard"来表示,而在JellyBean(安卓4.1)系统 ...
- 【每日一linux命令1】linux命令路径
一.路径: 执行命令前必须要考虑的一步是命令的路径,若是路径错误或是没有正确的指定,可能导致错误 的执行或是找不到该命令.要知道设置的路径,可执行以下命令: echo $PATH 显示结果: 这时我们 ...
- hibernate-mapping-3.0.dtd;hibernate-configuration-3.0.dtd;hibernate.properties所在路径
hibernate-mapping-3.0.dtd 所在路径:hibernate-release-5.2.5.Final\project\hibernate-core\src\main\resourc ...
- .NET全栈开发工程师学习路径
PS:最近一直反复地看博客园以前发布的一条.NET全栈开发工程师的招聘启事,觉得这是我看过最有创意也最朴实的一个招聘启事,更为重要的是它更像是一个技术提纲,能够指引我们的学习和提升,现在转载过来与各位 ...
随机推荐
- Linux第五次实验
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级: 201352 姓名:池彬宁 贺邦 学号:2013521 ...
- <实训|第二天>掌握linux6.7中安装vmware、vmware安装linux发行版本以及遇到的问题最后libreoffice的安装
期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...
- Mono Json序列化和Windows 下的差别
在Window下DataContractJsonSerializer 的序列化的时候 只要属性具有Get访问器就可以序列化为string 但是Mono下要想序列话 那么属性必须具有Get 和Set才能 ...
- C#6.0特性(快来围观)
说明一下,很多博友一进来就认为仅仅是语法糖,C#语法的更新,代表着它的进步,语法糖是为了让我们更好的实现语句和功能,增加了易读性和易用性.而且它的每次进步,也会给我们带来新的支持和改进.比如C#(4. ...
- jquery hasClass、removeClass、addClass方法
hasClass(class) 检查当前的元素是否含有某个特定的类,如果有,则返回true. 参数: class:用于匹配的类名. ---------------------------------- ...
- cryptDB安装分析
cryptDB的安装脚步是用ruby语言写的,由于这里对ruby语言不熟悉,只能做简答的分析.我们先看看cryptDB的目录结构. 主要的目录有bins.doc.main.udf目录,下面我们通过分析 ...
- Javascript基础系列之(五)条件语句(switch语句)
stwith语句的格式一般如下: switch (expression){ case value :statement1 break; case value2 :statement2 break; . ...
- [转]Java总结篇系列:Java泛型
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...
- OC基础--OC中类的定义
OC中类的定义与使用跟C#和java差别相当明显,做个笔记,牢记并加以区别! 一.OC中类的定义:关键字@implementation 和 @end 注意事项: 1.定义好一个类之后,要让这个类继承N ...
- IntelliJ IDEA 设置 编辑器字体大小
1,打开File->settings 2,在Edit->colors->Fonts下创建新字体 保存即可.