C#文件路径的写法
路径有3种方式,当前目录下的C#文件相对路径、当前工作盘的C#文件相对路径、绝对路径。以C:\Tmp\Book为例(假定当前工作目录为C:\Tmp)。“Book”,“\Tmp\Book”,“C:\Tmp\Book”都表示C:\Tmp\Book。
另外,在C#中 “\”是特殊字符,要表示它的话需要使用“\\”。由于这种写法不方便,C#语言提供了@对其简化。只要在字符串前加上@即可直接使用“\”。所以上面的路径在C#中应该表示为“Book”,@“\Tmp\Book”,@“C:\Tmp\Book”。
(1)HTML相对路径与绝对路径
相对路径
同一个目录的文件引用 如果源文件和引用文件在同一个目录里,直接写引用文件名即可,这时引用文件的方式就是使用相对路径。
我们现在建一个源文件info.html,在info.html里要引用index.html文件作为超链接。
假设info.html路径是:c:/Inetpub/wwwroot/sites/blabla/info.html 假设index.html路径是:c:/Inetpub/wwwroot/sites/blabla/index.html 在info.html加入index.html超链接的代码应该这样写:
<a href = "index.html">这是超连接</a>
如何表示下级目录
../表示源文件所在目录的上一级目录,表示源文件所在目录的上上级目录,以此类推。
<a href = "index.html">index.html</a> 假设info.html路径是:c:/Inetpub/wwwroot/sites/blabla/info.html 假设index.html路径是:c:/Inetpub/wwwroot/sites/wowstory/index.html 在info.html加入index.html超链接的代码应该这样写:
<a href = "../wowstory/index.html">index.html</a>
如何表示下级目录 引用下级目录的文件,直接写下级目录文件的路径即可。
假设info.html路径是:c:/Inetpub/wwwroot/sites/blabla/info.html 假设index.html路径是:c:/Inetpub/wwwroot/sites/blabla/html/tutorials/index.html 在info.html加入index.html超链接的代码应该这样写:
<a href = "html/tutorials/index.html">这是超连接</a>
绝对路径
例如只要看到这个路径:c:/website /img/photo.jpg我们就知道photo.jpg文件是在c盘的website目录下的img子目录中。
而在网站中类似以http://www.ajaxstu.com/img/photo.jpg来确定文件位置的方式也是绝对路径。
(2)文件路径中的/和\的区别
没有本质的区别
“\”是用在系统上,而“/“一般是用在网络上
但是由于 \ 也是转义字符的起始字符,所以,路径中的 \ 通常需要使用 \\,如果是 / 就不需要使用转义了
ASP.NET 网站路径
使用网站资源时,需要经常使用资源路径。比如,在页面中使用 URL 引用不同路径中的图片文件。类似地,Web 应用代码也可能使用物理文件路径来读写服务器端的文件。ASP.NET 提供不同的方法来引用资源并确定页面或其他资源的路径。
指定资源路径
ASP.NET 允许开发者通过多种方式引用页面元素或控件的外部资源文件。选择方式区别于客户端元素或服务器控件的类型。
客户端元素
页面中非服务器控件直接发送给浏览器。在此前,需要依照标准 HTML URL 规则构造用于客户端元素的资源引用路径。也可以使用完整(绝对)URL 路径或别的相关路径。比如 img 标记,可以将 src
- 绝对 URL 路径: <img src="http://www.contoso.com/MyApplication/Images/SampleImage.jpg" /> 绝对 URL 路径适用于引用对其他网站的资源。
- 根目录相对路径针对网站(非应用程序)根目录进行解析。下例假设网站根目录存在 Images 目录: <img src="/Images/SampleImage.jpg" /> 如果网站地址是 http://www.contoso.com,上例中的路径将解析成: http://www.contoso.com/Images/SampleImage.jpg 根目录相对路径适用于引用跨应用程序资源(图片或客户端脚本文件)。
- 相对路径针对当前路径进行解析: <img src="Images/SampleImage.jpg" />
- 相对路径会解析成当前页面路径。 <img src="../Images/SampleImage.jpg" /> 注意:默认时,浏览器参考当前页面的 URL 来解析相对路径。然而,使用 HTML 的
base
服务器控件
可以使用与客户端元素相同的方式指定 ASP.NET 服务器控件的资源引用路径。相对路径的解析会以当前页面,用户控件,或主题文件路径作为参照。比如,Controls 目录有一个用户控件,包含 ImageUrl 属性被设置成如下路径的 Image
Images/SampleImage.jpg
用户控件运行时,路径被解析成如下所示:
/Controls/Images/SampleImage.jpg
不用考虑使用该用户控件的页面路径。
在服务器控件中引用绝对路径或相对路径有下列缺点:
- 绝对路径无法在应用程序间移植。有造成所有链接中断的隐患。
- 客户端元素的相对路径在资源或页面移动时加大维护难度。
为了克服这些缺点,ASP.NET 使用了新 Web 根目录符号(~),用于设置服务器控件的路径。ASP.NET 将符号 ~ 解析成当前应用程序的根目录。可以用符号 ~ 与目录一道来指定基于当前根目录的路径。下例使用了符号 ~ 为服务器控件 Image
<asp:image runat="server" id="Image1" ImageUrl="~/Images/SampleImage.jpg" />
上例中的图片文件将会从网站根目录下的 Images 目录中读取,且当前页面可以放在网站的任何位置。
说明:符号 ~ 仅适用于服务器端代码的服务器控件。不能在客户端元素中使用。
服务器控件中任何与路径有关的属性都可使用符号 ~。
注意:在模板页中,对资源路径的解析是基于内容页面的。
确定当前网站的物理路径
应用程序中,可能需要确定服务器文件或资源的路径。比如,当应用程序要对一个文本文件进行读写,就需要为读取和写入功能提供目标文件的物理路径。
在应用程序中使用硬编码的物理路径(如 C:\Webste\MyApplication)并不是一个好的习惯,且路径会随着文件的移动或布署而发生变化。这时候可以通过基点参考的方法来为资源创建完整路径。ASP.NET 中常用来确定文件路径有两个方法:HttpRequest 对象属性,以及 MapPath
注意:为防止恶意用户获取应用程序的机密信息,请不要将物理文件路径发送到客户端。
Request
下表是 HttpRequest
首先,假设用浏览器发送如下请求:
http://www.contoso.com/MyApplication/MyPages/Default.aspx
在本文的例子中,对“虚拟路径”的参考都将服务器标识作为 URI 的一部分;而本例中的虚拟路径则是这样:
/MyApplication/MyPages/Default.aspx
另外,还假设网站根目录的物理路径如下:
C:\inetpub\wwwroot\MyApplication\
最后,还假设物理路径中包含子目录 MyPages。
属性 | 描述 |
| 获取当前应用程序根目录,无需考虑请求发生的位置。本例中的返回值如下: / |
| 获取当前请求的虚拟目录。与 /MyApplication/MyPages/Default.aspx 如果在代码中作为 |
| 获取当前请求的虚拟路径。本例中的返回值如下: /MyApplication/MyPages/Default.aspx 与 |
| 获取当前请求的虚拟路径。本例中的返回值如下: /MyApplication/MyPages/default.aspx |
| 获取当前执行的应用程序根目录的物理路径。本例中的返回值如下: C:\inetpub\wwwroot\ |
| 获取当前 URI 请求对应的物理系统文件路径。本例中的返回值如下: C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx |
MapPath
MapPath
String rootPath = Server.MapPath("~");
注意:传递给 MapPath