如何在C#中获取从一个路径到另一个路径的相对路径

我希望有一个内置的.NET方法来做到这一点,但我找不到它。

我知道有两条路径位于同一个根驱动器上,我希望能够获得从一个到另一个的相对路径。

string path1 = @"c:\dir1\dir2\"; string path2 = @"c:\dir1\dir3\file1.txt"; string relPath = MysteryFunctionThatShouldExist(path1, path2); // relPath == "..\dir3\file1.txt" 

这个function存在吗? 如果不是最好的方法来实现它?

Uri作品:

 Uri path1 = new Uri(@"c:\dir1\dir2\"); Uri path2 = new Uri(@"c:\dir1\dir3\file1.txt"); Uri diff = path1.MakeRelativeUri(path2); string relPath = diff.OriginalString; 

您还可以导入PathRelativePathTo函数并调用它。

例如:

 using System.Runtime.InteropServices; public static class Util { [DllImport( "shlwapi.dll", EntryPoint = "PathRelativePathTo" )] protected static extern bool PathRelativePathTo( StringBuilder lpszDst, string from, UInt32 attrFrom, string to, UInt32 attrTo ); public static string GetRelativePath( string from, string to ) { StringBuilder builder = new StringBuilder( 1024 ); bool result = PathRelativePathTo( builder, from, 0, to, 0 ); return builder.ToString(); } }