C#中的绝对路径和相对路径的求法

最近被绝对路劲和相对路径的问题困扰,谈一谈我的解决方法。
平时我们在xml中配置一个路劲的时候,有时候写相对路径比较方便,因为这样移植到其他电脑之后,就无需做任何更改,但是在xml中写的相对路径有时候会是IIS的路径,比如我们配置的Webservice服务用IIS发布。
发话不多说,上例子:
列子1:

string p1 = @"C:\A\B\C\D\E\F\G\H\";
string p2 = @"C:\A\B\M\N\";

求P2相对于P1的的相对路径,
先手动来,P1从后往前数:H->G->F->E->D->C->B然后在拼接在P2上,结论应该是:

string relativePath="..\\..\\..\\..\\..\\..\\M\\N";

有没有一种简便的方法呢?有
请看:

 class Program
    {
        static void Main(string[] args)
        {
            string p1 = @"C:\A\B\C\D\E\F\G\H\";
            string p2 = @"C:\A\B\M\N\";
            Uri u1 = new Uri(p1, UriKind.Absolute);
            Uri u2 = new Uri(p2, UriKind.Absolute);
            Uri u3 = u1.MakeRelativeUri(u2);//u2相对于u1的uri
            Console.WriteLine(u3.OriginalString);
            Console.Read();
        }
    }

运行结果
例子2:

string p3 = @"C:\A\B\C\D\E\F\G\H\";
string p4 = "..\\..\\..\\test.txt";

P4是相对路径,求P4相对于P3的绝对路径?

string p3 = @"C:\A\B\C\D\E\F\G\H\";
string p4 = "..\\..\\..\\X\\Y\\Z\\test.txt";
Uri uri_p3 = new Uri(p3, UriKind.Absolute);
Uri uri_P4 = new Uri(p4, UriKind.Relative);
Uri uri_result = new Uri(uri_p3, uri_P4);
Console.WriteLine("p4相对于P3的绝对路径是:"+uri_result.LocalPath);
Console.Read();

这里写图片描述
注意:绝对路径Uri对象取路径用LocalPath,相对路径的Uri对象取相对路径用OriginalString
这样我们在xml配置中填写复杂的相对路径时,再也不用担心我们的相对路径是相对的程序启动目录还是IIS得目录了。直接读取出相对路径,然后用Uri转换。之前我使用过System.IO.Path类进行各种拼接,最终以失败而告终。
以上为个人经验总结!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值