C# 中相对路径、绝对路径的问题

本文介绍了ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path的区别及其用法,详细讲解了如何在ASP.NET中处理文件路径,包括本地路径转换为URL相对路径及相对路径转换为服务器本地物理路径的方法。

1.使用filePath="/Logs/abc.txt",被认为是根目录,即网页文件所在的盘符,默认的是C盘,则在这里这个路径被解释为"C:/Logs/abc.txt"

2.使用filePath="~/Logs/abc.txt",被认为是服务器的目录

3.使用filePath="./Logs/abc.txt",仍然是服务器目录下

//本地路径转换成URL相对路径
     private string urlconvertor(string imagesurl1)
    
{
        
string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
        string imagesurl2 = imagesurl1.Replace(tmpRootDir, ""); //转换成相对路径
         imagesurl2 = imagesurl2.Replace(@"/", @"/");
        
//imagesurl2 = imagesurl2.Replace(@"Aspx_Uc/", @"");
        return imagesurl2;
     }

    
//相对路径转换成服务器本地物理路径
    private string urlconvertorlocal(string imagesurl1)
    
{
        
string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
        string imagesurl2 = tmpRootDir + imagesurl1.Replace(@"/", @"/"); //转换成绝对路径
         return imagesurl2;
     }

 

1.Request.ApplicationPath->当前应用的目录
Jsp中, ApplicationPath指的是当前的application(应用程序)的目录,ASP.NET中也是这个意思。
对应的--例如我的服务器上有两个web应用域名都是mockte.com 一个映射到目录mockte.com/1/ 另一个影射到 http://mockte.com/2/
那么mockte.com/1/就是第一个应用的ApplicationPath 同理 mockte.com/2/就是第二个应用的ApplicationPath

2.Request.FilePath->对应于iis的虚拟目录
如 URL http://mockte.com/1/index.html/pathinfo
FilePath = /1/index.html

3.Request.Path->当前请求的虚拟路径
Path 是 FilePath 和 PathInfo 尾部的串联。例如 URL http://mockte.com/1/index.html/pathinfo
那么Path = /1/index.html/pathinfo

4.Request.MapPath(string url)->将url映射为iis上的虚拟目录
这个目录都是相对于application的根目录的
于Server.MapPath相比,不会包含类似c:/这样的路径
可以理解为是相对路径(对比的Server.MapPath就是绝对路径)

5.Server.MapPath(string url)->将url映射为服务器上的物理路径
例如 http://mockte.com/1/index.html 假设你的应用程序在c:/iis/MySite中
那么就是 c:/iis/MySite/1/index.html

### C#相对路径绝对路径的区别及用法 #### 路径的概念区分 在计算机科学中,路径用于描述文件或目录的具体位置。根据其定义方式的不同,分为绝对路径相对路径。 - **绝对路径**是指从根目录开始到目标文件或目录的完整路径。无论当前工作目录如何变化,绝对路径始终指向同一个文件或目录[^1]。 - **相对路径**则是指相对于某个特定目录(通常是程序运行时的工作目录)的目标文件或目录的位置。它的表示依赖于当前上下文环境,因此可能因工作目录的变化而改变[^2]。 --- #### 方法概述 C# 提供了多种工具来操作路径: - `System.IO.Path` 类中的静态方法可以帮助开发者方便地处理路径转换问题。例如: - `Path.GetFullPath()` 可以将相对路径解析为绝对路径。 - `Path.GetRelativePath()` 则允许将一个已知的绝对路径转化为基于另一个基础路径的相对形式。 - 此外,还可以通过其他属性获取应用程序的相关路径信息。比如使用 `Type.Assembly.Location` 获取当前执行程序集的实际存储地址[^3]。 --- #### 示例代码展示 以下是几个具体的例子演示如何利用上述技术实现不同场景下的需求: ##### 将相对路径转成绝对路径 当需要明确知道某资源的确切物理位置时,可采用如下做法: ```csharp using System; using System.IO; class Program { static void Main(string[] args){ string relativePath = @"..\data\example.txt"; string fullPath = Path.GetFullPath(relativePath); Console.WriteLine($"Full path is {fullPath}"); } } ``` 此段脚本会打印出给定相对路径对应的完全表述形式。 ##### 把绝对路径变更为相对表达 如果希望简化显示或者适应某些特殊配置要求,则可以通过下面的方式完成逆向变换过程: ```csharp using System; using System.IO; class Program{ public static void Main(){ string basePath = @"C:\basefolder"; string absoluteFilePath = @"C:\basefolder\data\file.txt"; string relPath = Path.GetRelativePath(basePath,absoluteFilePath); Console.WriteLine(relPath); // Outputs: data\file.txt } } ``` 这里展示了怎样依据指定的基础路径生成关联性的较短描述版本。 ##### 查询应用自身的安装地点 有时候为了加载嵌入式资源或者其他目的,我们需要获知正在运行的应用所在磁盘上的确切坐标点: ```csharp string appLocation = typeof(Program).Assembly.Location; Console.WriteLine(appLocation); // 输出类似于"C:\\Users\\User\\AppData\\Local\\Temp\\.net\\MyApp.exe" ``` 这段逻辑片段直接调用了反射机制里面的成员变量`.Assembly.Location`,从而得到启动该实例所使用的二进制镜像具体存放处. --- ### 总结 综上所述,在实际项目构建过程中合理运用这两种类型的定位手段非常重要。一方面它们各自具备独特的优势;另一方面又互为补充共同构成了灵活多样的寻址体系结构支持框架。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值