Ответ 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;
Я надеюсь, что для этого есть встроенный метод .NET, но я не нахожу его.
У меня есть два пути, которые, как я знаю, находятся на одном и том же корневом диске, я хочу иметь возможность получить относительный путь от одного к другому.
string path1 = @"c:\dir1\dir2\";
string path2 = @"c:\dir1\dir3\file1.txt";
string relPath = MysteryFunctionThatShouldExist(path1, path2);
// relPath == "..\dir3\file1.txt"
Существует ли эта функция? Если бы не лучший способ его реализации?
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();
}
}