您的位置:首页 > 编程语言 > C#

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

2016-12-15 22:36 183 查看
最近被绝对路劲和相对路径的问题困扰,谈一谈我的解决方法。

平时我们在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类进行各种拼接,最终以失败而告终。

以上为个人经验总结!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#-路径