Подтвердить что ты не робот

Как получить относительный путь от одного пути к другому в С#

Я надеюсь, что для этого есть встроенный метод .NET, но я не нахожу его.

У меня есть два пути, которые, как я знаю, находятся на одном и том же корневом диске, я хочу иметь возможность получить относительный путь от одного к другому.

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

Существует ли эта функция? Если бы не лучший способ его реализации?

4b9b3361

Ответ 1

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;

Ответ 2

Вы также можете импортировать функцию 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();
  }
}