C#绝对路径和相对路径的相互转换

本文介绍了一种将绝对路径转换为相对路径以及将相对路径转换为绝对路径的方法。通过获取程序的根目录并进行字符串操作实现路径转换,适用于Web应用程序。
/// <summary>
        /// 绝对路径转相对路径
        /// </summary>
        /// <param name="strUrl"></param>
        /// <returns></returns>
        private static string urlConvertor(string strUrl)
        {
            string tmpRootDir = HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
            string urlPath = strUrl.Replace(tmpRootDir, ""); //转换成相对路径
            urlPath = urlPath.Replace(@"/", @"/");
            return urlPath;
        }

        /// <summary>
        /// 相对路径转绝对路径
        /// </summary>
        /// <param name="strUrl"></param>
        /// <returns></returns>
        private static string urlConvertorLocal(string strUrl)
        {
            string tmpRootDir = HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
            string urlPath = tmpRootDir + strUrl.Replace(@"/", @"/"); //转换成绝对路径
            return urlPath;
        }

### 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`,从而得到启动该实例所使用的二进制镜像具体存放处. --- ### 总结 综上所述,在实际项目构建过程中合理运用这两种类型的定位手段非常重要。一方面它们各自具备独特的优势;另一方面又互为补充共同构成了灵活多样的寻址体系结构支持框架。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值